SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
サーバインフラ勉強会
 データベース編
今回の目的
1. 「データを保存する」ということが、実際にど
   ういうことなのかを知る。
2. 中の動作を踏まえることで、効率のよいアプ
   リを書けるようになる。
3. 問題が起きたときに、その原因を突き止めら
   れるようになる。

           一般論をメインとし、MySQL等の細かい
           個別ノウハウは取り上げません。
おしながき
1.   「データを保存する」とはどういうことか
2.   MySQLがディスクに書くまで
3.   仮想メモリとページキャッシュ
4.   とっても複雑なストレージの動作
5.   MySQLのインデックスとメモリの関係
「データを保存する」とは
• システム内のデータを、それを必要とする期
  間にわたり、読み書きできるようにすること
       書き込み




              必要な期間だけ
               データを保持



       読み取り
「データを保存する」とは
• システム内のデータを、それを必要とする期
  間にわたり、読み書きできるようにすること
          書き込み              どれぐらいの
                            期間なのか


          どのような
         データなのか
どのデータを            必要な期間だけ
読み取るのか             データを保持



          読み取り
「データを保存する」とは
• システム内のデータを、それを必要とする期
  間にわたり、読み書きできるようにすること
一般的な
RDBMSの場合         書き込み
                                   消すまで残す


               複数の数値や
              文字列が集まった
               かたまり(行)
データのかたまり                 必要な期間だけ
 毎に振られた                   データを保持
数値(PKEY)を指定


                 読み取り
じゃあ実際どうなっているのか
  (Linux+MySQLの場合)
       ウェブサーバ                      DBサーバ

                                        MySQL

        アプリ                    SQL処理        ストレージエンジン
                             クエリキャッシュ          バッファ
        本体


                                             システムコール
        ネットワーク                ネットワーク
カーネル




                                                          カーネル
                                             VFS・キャッシュ
         スタック                  スタック
                                            ファイルシステム
                                               (EXT3)
       デバイスドライバ
                              NICドライバ       デバイスドライバ
          (NIC)
                                              (SATA)


        ネットワーク     ネットワーク     ネットワーク
                  ルータ・スイッチ                  SATAハードディスク
       インターフェース              インターフェース
ネットワーク部分を省略
  (Linux+MySQLの場合)

                     MySQL

     アプリ        SQL処理    ストレージエンジン
              クエリキャッシュ      バッファ
     本体


                          システムコール
サーバ内の場合でも、




                                       カーネル
                          VFS・キャッシュ

実際にはカーネルの                   EXT3
                         ファイルシステム
ネットワークスタックを              デバイスドライバ
  通るので注意
 (あくまで簡略化)               SATAハードディスク
MySQLからハードディスクまで

                MySQL

   アプリ     SQL処理    ストレージエンジン
         クエリキャッシュ      バッファ
   本体                                    まずはこの部
                                         分に注目しま
                                           す
                     システムコール




                                  カーネル
                     VFS・キャッシュ
                       EXT3
                    ファイルシステム

                    デバイスドライバ



                    SATAハードディスク
MySQLがディスクに書くまでの
           おおまかな流れ
1.   MySQL→カーネル
     システムコールを用いて、書き込むデータをカーネルに送る。
2.   システムコール→VFS (以下カーネル内)
     システムコールのルーチン内で、LinuxのVFS(仮想ファイルシステム)に書き込
     み指示を送る。
3.   VFS→EXT3
     VFSは、書き込み先ディレクトリがEXT3でマウントされたファイルシステムである
     ことを特定し、EXT3のモジュールに書き込み指示を送る。
4.   EXT3→デバイスドライバ
     ここでようやく実際にファイルの記録方法が実装されているため、ハードディス
     ク上における記録先アドレスを算出し、デバイスドライバに書き込み指示を送る。
5.   デバイスドライバ→SATA HBA(コントローラ)
     デバイスドライバは、記録先アドレスをハードディスクのパーティション情報など
     を踏まえた物理的な書き込み先アドレスに変換し、HBAに指示
6.   SATA HBA→ハードディスク
     HBAはメモリから書き込み内容を受け取り、SATAのコマンドとしてハードディスク
     に書き込み内容を送信
7.   書き込み成功したら、その結果を今までの逆順でMySQLまで戻す。
                          実際にはもっと複雑です。
                      (ディスクへの書き込みは非同期、など)
MySQLがディスクに書くまでの
           おおまかな流れ
1.   MySQL→カーネル
     システムコールを用いて、書き込むデータをカーネルに送る。
2.   システムコール→VFS (以下カーネル内)
     システムコールのルーチン内で、LinuxのVFS(仮想ファイルシステム)に書き込
     み指示を送る。
3.   VFS→EXT3
     VFSは、書き込み先ディレクトリがEXT3でマウントされたファイルシステムである
     ことを特定し、EXT3のモジュールに書き込み指示を送る。
4.   EXT3→デバイスドライバ
     ここでようやく実際にファイルの記録方法が実装されているため、ハードディス
     ク上における記録先アドレスを算出し、デバイスドライバに書き込み指示を送る。
5.   デバイスドライバ→SATA HBA(コントローラ)
     デバイスドライバは、記録先アドレスをハードディスクのパーティション情報など
     を踏まえた物理的な書き込み先アドレスに変換し、HBAに指示
6.   SATA HBA→ハードディスク
     HBAはメモリから書き込み内容を受け取り、SATAのコマンドとしてハードディスク
     に書き込み内容を送信
7.   書き込み成功したら、その結果を今までの逆順でMySQLまで戻す。
                          実際にはもっと複雑です。
                      (ディスクへの書き込みは非同期、など)
仮想メモリ
• Unix環境では、仮想メモリを利用します。
 – 物理的なメモリのアドレスを、仮想的なメモリの空
   間にマッピング
 – プロセスごとに仮想メモリ空間が用意され、そこ
   に開けられた「窓」を通じて物理メモリにアクセス
 – 窓のあいていない仮想メモリにアクセスすると
   「Segmentation fault」
仮想メモリでコピーを抑止
1.   MySQL→カーネル
2.   システムコール→VFS
                         書き込みデータの
3.   VFS→EXT3            アドレスのみを渡し
                         データ自身の
                         コピーは行わない
4.   EXT3→デバイスドライバ
5.   デバイスドライバ→SATA HBA
                         書き込みデータの
6.   SATA HBA→物理ディスク     アドレスを受け取り、
                         HBAがメモリから直接
                         データを持って行く
                         (DMA)
ページキャッシュ
• 仮想メモリ上でやりとりしたデータを、消さず
  にそのまま再利用→ページキャッシュ
• VFS内で、1ページ=4KBごとにキャッシュ
 – ファイル1個ずつに振られたiノード番号
 – ファイル内の位置(オフセット)
• Linuxではメモリが足りる限りページキャッシュ
  を残す。
• 実際にはページキャッシュに書いた時点で、
  システムコールはアプリに処理を戻す。
ページキャッシュ




http://www.atmarkit.co.jp/flinux/special/kernel26/kernel26_01c.html より引用
MySQLからハードディスクまで

                MySQL

   アプリ     SQL処理    ストレージエンジン
         クエリキャッシュ      バッファ
   本体


                     システムコール




                                  カーネル
                     VFS・キャッシュ
                       EXT3
                    ファイルシステム             次はここ
                    デバイスドライバ



                    SATAハードディスク
SATAハードディスクへの読み書き
• 基本的な動作(単体のSATAディスクの場合)
 1. デバイスドライバがSATAのコマンドを作成
 2. SATAインターフェースカードがコマンドをSATA
    ケーブルに送信
 3. ハードディスクがSATAコマンドを受信
 4. 書き込み位置にヘッドを移動
 5. 回り続けるディスクで、ヘッドの下に書き込み位
    置が来たところで磁気を使って書き込み
複雑になる要因
     コマンドキューイング
• ハードディスクが遅い最大要因:
 • 「回り続けるディスクで、ヘッドの下に書き込み位
   置が来たところで磁気を使って書き込み」


• 物理的に近いものをまとめて読み書き
 →コマンドをいったん待ち行列に入れ(キューイン
  グ)、都合の良い順序に入れ替え
複雑になる要因
コマンドキューイング




http://ascii.jp/elem/000/000/346/346448/index-2.html より引用
複雑になる要因
        RAIDコントローラ
• ハードディスクが遅いなら並べれば早くなる

• データを細切りにして複数のハードディスクに分
  散して読み書き
• RAIDコントローラ内のキャッシュに保存したら、も
  う書き込み終わったことにしてしまう
  (ライトバックキャッシュ)
 – 停電したら書いたはずのデータが実は未保存
   → RAIDコントローラに電池を搭載(BBWC)
     電源復帰したら書き込み
     (バッテリーなしでは危険!)
複雑になる要因
          SSD
• フラッシュメモリを使った記録メディア
 – 物理的な可動部分がないので反応が早い。
 – 同じ場所を何度も書き込みすると寿命が来る。
 – インターフェースはSATA,SAS等
• ウェアレベリング
 – 仮想メモリのように、実際の記録先を入れ替える。
 – 寿命が来たブロックを切り離し、代替ブロックと差
   し替える。
 – どちらも、SATAコントローラ側からは関知しない
複雑になる要因
     FusionIO ioDrive等の出現
• 性能特性が全く異なる(ディスクとメモリの中間)
  – 量が多く全体を舐める集計処理
  – 運用コスト削減
  (台数削減)
 – 開発の省力化
  (チューニング等)




   http://monoist.atmarkit.co.jp/feledev/news/2011/01/13ted.html より引用
複雑になる要因
       階層型ストレージ
• アクセス頻度に応じて、物理メディアを変更
 – アクセス頻度が低い:回転数の低いSATAディスク
 – アクセス頻度が普通:SASディスク
 – アクセス頻度が高い:SSDやFusionIO
 – アクセス頻度が極めて高い:キャッシュを併用
MySQLからハードディスクまで

                MySQL

   アプリ     SQL処理    ストレージエンジン
         クエリキャッシュ      バッファ
   本体


                                          MySQL
                     システムコール
                                         ストレージ




                                  カーネル
                     VFS・キャッシュ
                       EXT3              エンジン
                    ファイルシステム

                    デバイスドライバ



                    SATAハードディスク
MySQLサーバの内部構造


           クライアント管理
           SQLのパースや、
           クエリの最適化、
           クエリキャッシュ等

           ファイルシステムに
           データを保存する
           ストレージエンジン

           Linuxカーネルの
           ファイルシステム
MySQLサーバの内部構造


               クライアント管理
 MySQL
ストレージ          SQLのパースや、
エンジン           クエリの最適化、
               クエリキャッシュ等

               ファイルシステムに
               データを保存する
               ストレージエンジン

               Linuxカーネルの
               ファイルシステム
ストレージエンジンの仕事
• 表形式のデータを保存する。
 – 複数のカラム(数値、文字列等)が集まった行
 – 複数の行が集まった表
 – 複数の表が集まったデータベース
• 表から、検索条件に見合う行(に含まれるカラ
  ム)を検索・取得する。
ストレージエンジンの仕事
• 表形式のデータを保存する。
 – 複数のカラム(数値、文字列等)が集まった行
 – 複数の行が集まった表
 – 複数の表が集まったデータベース
• 表から、検索条件に見合う行(に含まれるカラ
  ム)を検索・取得する。

• 検索しやすい形式でデータを記録する。
検索の仕方
1. 順次走査検索(grep型)
 – データの内容を一件ずつ検索条件と比較する。
 – 挿入のコストはO(1)、検索のコストはO(n)
2. インデックス検索
 – あらかじめ、検索用の小さな索引(インデックス)
   を作成しておき、高速に検索する。
 – インデックスの作成方法がたくさんある
 – MySQLであれば原則B木(B-tree)
   挿入・検索のコストはO(log n)
データ本体の格納場所
• クラスタードインデックス(InnoDB等)
 – プライマリキーのB木の末端に、直接その行の
   データ本体を記録する。
 – プライマリキーからの検索であれば、B木を一回
   たどるだけで取得可能
 – プライマリキー以外での検索は、セカンダリーイ
   ンデックスの末端にプライマリキーを格納し、2回
   B木をたどる。
インデックスが高速な理由
1. そもそも検索コストが低い
 – O(n)に対して、O(log n)しか計算量が増えない。
 – データ量が、1MB→10MBに増えたときに検索時
   間が0.01秒から0.1秒に10倍に増えたと仮定。
 – 10MB→100MBに増えた場合:
   逐次検索:さらに10倍に増えて、1秒
   インデックス検索:2倍しか増えず、0.2秒
インデックスが高速な理由
2. アクセスするデータ量が少ない
 – OSのページキャッシュに残る可能性が上がる
 – 1GBのデータ本体、100MBのインデックス
   逐次検索:毎回、平均500MBを読み取り
   インデックス検索:毎回、平均50MBを読み取り
   (実際はB木の辿った部分のみでさらに少ない)
 – インデックスがページキャッシュからあふれると、
   一気に性能が务化
インデックスの更新
• インデックスが更新されるケース
 – データの追加・削除
 – インデックスを張っているデータの変更
• 何が起きるか
 – B木が深くなり、効率が下がる
 – インデックスを詰めるのは大変
   →削除マークをつけて無視する
 – インデックスのサイズが増える→メモリから溢れる
• 不必要なインデックスは作らないことも重要
MySQLサーバの内部構造


                    クライアント管理
                    SQLのパースや、
                    クエリの最適化、
                    クエリキャッシュ等

                    ファイルシステムに
                    データを保存する
 MySQL              ストレージエンジン
パース等
                    Linuxカーネルの
                    ファイルシステム
SQLのパース処理
• SQLのパースは案外重い
 – 上半分をまるまる差し替える
   DeNA Handlersocket plugin
• クエリキャッシュをうまく使う
 – プリペアドステートメントはキャッシュ効かないorz
                               この辺は個別ノウハウの
                               かたまりなので今回は割愛

Mais conteúdo relacionado

Mais procurados

20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)Takahiro Iwase
 
バックアップとリストアの基礎
バックアップとリストアの基礎バックアップとリストアの基礎
バックアップとリストアの基礎Kazuki Takai
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat StorageマルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat StorageTaira Hajime
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージTakashi Hoshino
 
Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編fj_staoru_takeuchi
 
バックアップ勉強会#1 バックアップ基礎
バックアップ勉強会#1 バックアップ基礎バックアップ勉強会#1 バックアップ基礎
バックアップ勉強会#1 バックアップ基礎MKT International Inc.
 
Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Daisuke Ikeda
 
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなしOSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなしSatoshi Shimazaki
 
LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識MKT International Inc.
 
一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築VirtualTech Japan Inc.
 
Cassandraバージョンアップ&移設
Cassandraバージョンアップ&移設Cassandraバージョンアップ&移設
Cassandraバージョンアップ&移設Takehiro Torigaki
 
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーションTakashi Hoshino
 
PowerDNSのご紹介
PowerDNSのご紹介PowerDNSのご紹介
PowerDNSのご紹介Akira Matsuda
 
Microsoft power point ai fss 製品概要-4-4 [互換モード]
Microsoft power point   ai fss 製品概要-4-4 [互換モード]Microsoft power point   ai fss 製品概要-4-4 [互換モード]
Microsoft power point ai fss 製品概要-4-4 [互換モード]龍雄 炭田
 

Mais procurados (20)

Kernel ext4
Kernel ext4Kernel ext4
Kernel ext4
 
Linux Namespace
Linux NamespaceLinux Namespace
Linux Namespace
 
20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)
 
バックアップとリストアの基礎
バックアップとリストアの基礎バックアップとリストアの基礎
バックアップとリストアの基礎
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat StorageマルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
 
Consistency level
Consistency levelConsistency level
Consistency level
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージ
 
Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編
 
バックアップ勉強会#1 バックアップ基礎
バックアップ勉強会#1 バックアップ基礎バックアップ勉強会#1 バックアップ基礎
バックアップ勉強会#1 バックアップ基礎
 
Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)
 
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなしOSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
 
WalBの紹介
WalBの紹介WalBの紹介
WalBの紹介
 
LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識LTO/オートローダー/仮想テープライブラリの基礎知識
LTO/オートローダー/仮想テープライブラリの基礎知識
 
一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築一歩進んだXen仮想化環境構築
一歩進んだXen仮想化環境構築
 
Cassandraバージョンアップ&移設
Cassandraバージョンアップ&移設Cassandraバージョンアップ&移設
Cassandraバージョンアップ&移設
 
10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション10分で分かるバックアップとレプリケーション
10分で分かるバックアップとレプリケーション
 
PowerDNSのご紹介
PowerDNSのご紹介PowerDNSのご紹介
PowerDNSのご紹介
 
Sfstudy#2チーム5
Sfstudy#2チーム5Sfstudy#2チーム5
Sfstudy#2チーム5
 
Microsoft power point ai fss 製品概要-4-4 [互換モード]
Microsoft power point   ai fss 製品概要-4-4 [互換モード]Microsoft power point   ai fss 製品概要-4-4 [互換モード]
Microsoft power point ai fss 製品概要-4-4 [互換モード]
 

Semelhante a 社内サーバインフラ勉強会(DB)

SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポートAkihiro Kuwano
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズSORACOM, INC
 
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent MemoryASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent MemoryAtsushi Koshiba
 
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティSaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティKuniyasu Suzaki
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価Satoshi Nagayasu
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deploymentssmdkk
 
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)CLOUDIAN KK
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Takamasa Maejima
 
Oci file storage service deep dive 20181001 ss
Oci file storage service deep dive 20181001 ssOci file storage service deep dive 20181001 ss
Oci file storage service deep dive 20181001 ssKenichi Sonoda
 
CloudStack at Cloud Week 2012
CloudStack at Cloud Week 2012CloudStack at Cloud Week 2012
CloudStack at Cloud Week 2012Kimihiko Kitase
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Yuki Morishita
 
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみたA 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみたGoAzure
 
第2章アーキテクチャ
第2章アーキテクチャ第2章アーキテクチャ
第2章アーキテクチャKenta Hattori
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなことHiroaki Sano
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたSunao Tomita
 
マイニング探検会#10
マイニング探検会#10マイニング探検会#10
マイニング探検会#10Yoji Kiyota
 

Semelhante a 社内サーバインフラ勉強会(DB) (20)

SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポート
 
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
 
Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent MemoryASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory
 
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティSaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価
 
Ia20120118 kaneda
Ia20120118 kanedaIa20120118 kaneda
Ia20120118 kaneda
 
Guide to Cassandra for Production Deployments
Guide to Cassandra for Production DeploymentsGuide to Cassandra for Production Deployments
Guide to Cassandra for Production Deployments
 
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
Cloudianの構築と運用の基礎 (Cloudian Summit 2012)
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
 
Oci file storage service deep dive 20181001 ss
Oci file storage service deep dive 20181001 ssOci file storage service deep dive 20181001 ss
Oci file storage service deep dive 20181001 ss
 
CloudStack at Cloud Week 2012
CloudStack at Cloud Week 2012CloudStack at Cloud Week 2012
CloudStack at Cloud Week 2012
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみたA 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
A 1-3 awsのクラウドデザインパターンをwindows-azureに持ってきてみた
 
SQL Server 入門
SQL Server 入門SQL Server 入門
SQL Server 入門
 
第2章アーキテクチャ
第2章アーキテクチャ第2章アーキテクチャ
第2章アーキテクチャ
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなこと
 
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみたAwsのクラウドデザインパターンをwindows azureに持ってきてみた
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
 
マイニング探検会#10
マイニング探検会#10マイニング探検会#10
マイニング探検会#10
 

Mais de Masahiro NAKAYAMA

ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampイントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjpめもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjpMasahiro NAKAYAMA
 
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp Masahiro NAKAYAMA
 
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介Masahiro NAKAYAMA
 
サーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップサーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップMasahiro NAKAYAMA
 
#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れよう#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れようMasahiro NAKAYAMA
 
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo Masahiro NAKAYAMA
 
クラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjpクラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjpMasahiro NAKAYAMA
 
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365Masahiro NAKAYAMA
 
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampIoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampMasahiro NAKAYAMA
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampMasahiro NAKAYAMA
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjpMasahiro NAKAYAMA
 
「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyo「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyoMasahiro NAKAYAMA
 
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyoBluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyoMasahiro NAKAYAMA
 
IoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスMasahiro NAKAYAMA
 
Serverless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcServerless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcMasahiro NAKAYAMA
 
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomugMasahiro NAKAYAMA
 

Mais de Masahiro NAKAYAMA (20)

ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampイントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjpめもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
 
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
 
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
 
サーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップサーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップ
 
#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れよう#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れよう
 
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
 
クラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjpクラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjp
 
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
 
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampIoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
 
Serverless book
Serverless bookServerless book
Serverless book
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccamp
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp
 
「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyo「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyo
 
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyoBluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
 
IoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレス
 
Serverless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcServerless Architecture Overview #cdevc
Serverless Architecture Overview #cdevc
 
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
 

Último

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Último (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

社内サーバインフラ勉強会(DB)

  • 2. 今回の目的 1. 「データを保存する」ということが、実際にど ういうことなのかを知る。 2. 中の動作を踏まえることで、効率のよいアプ リを書けるようになる。 3. 問題が起きたときに、その原因を突き止めら れるようになる。 一般論をメインとし、MySQL等の細かい 個別ノウハウは取り上げません。
  • 3. おしながき 1. 「データを保存する」とはどういうことか 2. MySQLがディスクに書くまで 3. 仮想メモリとページキャッシュ 4. とっても複雑なストレージの動作 5. MySQLのインデックスとメモリの関係
  • 4. 「データを保存する」とは • システム内のデータを、それを必要とする期 間にわたり、読み書きできるようにすること 書き込み 必要な期間だけ データを保持 読み取り
  • 5. 「データを保存する」とは • システム内のデータを、それを必要とする期 間にわたり、読み書きできるようにすること 書き込み どれぐらいの 期間なのか どのような データなのか どのデータを 必要な期間だけ 読み取るのか データを保持 読み取り
  • 6. 「データを保存する」とは • システム内のデータを、それを必要とする期 間にわたり、読み書きできるようにすること 一般的な RDBMSの場合 書き込み 消すまで残す 複数の数値や 文字列が集まった かたまり(行) データのかたまり 必要な期間だけ 毎に振られた データを保持 数値(PKEY)を指定 読み取り
  • 7. じゃあ実際どうなっているのか (Linux+MySQLの場合) ウェブサーバ DBサーバ MySQL アプリ SQL処理 ストレージエンジン クエリキャッシュ バッファ 本体 システムコール ネットワーク ネットワーク カーネル カーネル VFS・キャッシュ スタック スタック ファイルシステム (EXT3) デバイスドライバ NICドライバ デバイスドライバ (NIC) (SATA) ネットワーク ネットワーク ネットワーク ルータ・スイッチ SATAハードディスク インターフェース インターフェース
  • 8. ネットワーク部分を省略 (Linux+MySQLの場合) MySQL アプリ SQL処理 ストレージエンジン クエリキャッシュ バッファ 本体 システムコール サーバ内の場合でも、 カーネル VFS・キャッシュ 実際にはカーネルの EXT3 ファイルシステム ネットワークスタックを デバイスドライバ 通るので注意 (あくまで簡略化) SATAハードディスク
  • 9. MySQLからハードディスクまで MySQL アプリ SQL処理 ストレージエンジン クエリキャッシュ バッファ 本体 まずはこの部 分に注目しま す システムコール カーネル VFS・キャッシュ EXT3 ファイルシステム デバイスドライバ SATAハードディスク
  • 10. MySQLがディスクに書くまでの おおまかな流れ 1. MySQL→カーネル システムコールを用いて、書き込むデータをカーネルに送る。 2. システムコール→VFS (以下カーネル内) システムコールのルーチン内で、LinuxのVFS(仮想ファイルシステム)に書き込 み指示を送る。 3. VFS→EXT3 VFSは、書き込み先ディレクトリがEXT3でマウントされたファイルシステムである ことを特定し、EXT3のモジュールに書き込み指示を送る。 4. EXT3→デバイスドライバ ここでようやく実際にファイルの記録方法が実装されているため、ハードディス ク上における記録先アドレスを算出し、デバイスドライバに書き込み指示を送る。 5. デバイスドライバ→SATA HBA(コントローラ) デバイスドライバは、記録先アドレスをハードディスクのパーティション情報など を踏まえた物理的な書き込み先アドレスに変換し、HBAに指示 6. SATA HBA→ハードディスク HBAはメモリから書き込み内容を受け取り、SATAのコマンドとしてハードディスク に書き込み内容を送信 7. 書き込み成功したら、その結果を今までの逆順でMySQLまで戻す。 実際にはもっと複雑です。 (ディスクへの書き込みは非同期、など)
  • 11. MySQLがディスクに書くまでの おおまかな流れ 1. MySQL→カーネル システムコールを用いて、書き込むデータをカーネルに送る。 2. システムコール→VFS (以下カーネル内) システムコールのルーチン内で、LinuxのVFS(仮想ファイルシステム)に書き込 み指示を送る。 3. VFS→EXT3 VFSは、書き込み先ディレクトリがEXT3でマウントされたファイルシステムである ことを特定し、EXT3のモジュールに書き込み指示を送る。 4. EXT3→デバイスドライバ ここでようやく実際にファイルの記録方法が実装されているため、ハードディス ク上における記録先アドレスを算出し、デバイスドライバに書き込み指示を送る。 5. デバイスドライバ→SATA HBA(コントローラ) デバイスドライバは、記録先アドレスをハードディスクのパーティション情報など を踏まえた物理的な書き込み先アドレスに変換し、HBAに指示 6. SATA HBA→ハードディスク HBAはメモリから書き込み内容を受け取り、SATAのコマンドとしてハードディスク に書き込み内容を送信 7. 書き込み成功したら、その結果を今までの逆順でMySQLまで戻す。 実際にはもっと複雑です。 (ディスクへの書き込みは非同期、など)
  • 12. 仮想メモリ • Unix環境では、仮想メモリを利用します。 – 物理的なメモリのアドレスを、仮想的なメモリの空 間にマッピング – プロセスごとに仮想メモリ空間が用意され、そこ に開けられた「窓」を通じて物理メモリにアクセス – 窓のあいていない仮想メモリにアクセスすると 「Segmentation fault」
  • 13. 仮想メモリでコピーを抑止 1. MySQL→カーネル 2. システムコール→VFS 書き込みデータの 3. VFS→EXT3 アドレスのみを渡し データ自身の コピーは行わない 4. EXT3→デバイスドライバ 5. デバイスドライバ→SATA HBA 書き込みデータの 6. SATA HBA→物理ディスク アドレスを受け取り、 HBAがメモリから直接 データを持って行く (DMA)
  • 14. ページキャッシュ • 仮想メモリ上でやりとりしたデータを、消さず にそのまま再利用→ページキャッシュ • VFS内で、1ページ=4KBごとにキャッシュ – ファイル1個ずつに振られたiノード番号 – ファイル内の位置(オフセット) • Linuxではメモリが足りる限りページキャッシュ を残す。 • 実際にはページキャッシュに書いた時点で、 システムコールはアプリに処理を戻す。
  • 16. MySQLからハードディスクまで MySQL アプリ SQL処理 ストレージエンジン クエリキャッシュ バッファ 本体 システムコール カーネル VFS・キャッシュ EXT3 ファイルシステム 次はここ デバイスドライバ SATAハードディスク
  • 17. SATAハードディスクへの読み書き • 基本的な動作(単体のSATAディスクの場合) 1. デバイスドライバがSATAのコマンドを作成 2. SATAインターフェースカードがコマンドをSATA ケーブルに送信 3. ハードディスクがSATAコマンドを受信 4. 書き込み位置にヘッドを移動 5. 回り続けるディスクで、ヘッドの下に書き込み位 置が来たところで磁気を使って書き込み
  • 18. 複雑になる要因 コマンドキューイング • ハードディスクが遅い最大要因: • 「回り続けるディスクで、ヘッドの下に書き込み位 置が来たところで磁気を使って書き込み」 • 物理的に近いものをまとめて読み書き →コマンドをいったん待ち行列に入れ(キューイン グ)、都合の良い順序に入れ替え
  • 20. 複雑になる要因 RAIDコントローラ • ハードディスクが遅いなら並べれば早くなる • データを細切りにして複数のハードディスクに分 散して読み書き • RAIDコントローラ内のキャッシュに保存したら、も う書き込み終わったことにしてしまう (ライトバックキャッシュ) – 停電したら書いたはずのデータが実は未保存 → RAIDコントローラに電池を搭載(BBWC) 電源復帰したら書き込み (バッテリーなしでは危険!)
  • 21. 複雑になる要因 SSD • フラッシュメモリを使った記録メディア – 物理的な可動部分がないので反応が早い。 – 同じ場所を何度も書き込みすると寿命が来る。 – インターフェースはSATA,SAS等 • ウェアレベリング – 仮想メモリのように、実際の記録先を入れ替える。 – 寿命が来たブロックを切り離し、代替ブロックと差 し替える。 – どちらも、SATAコントローラ側からは関知しない
  • 22. 複雑になる要因 FusionIO ioDrive等の出現 • 性能特性が全く異なる(ディスクとメモリの中間) – 量が多く全体を舐める集計処理 – 運用コスト削減 (台数削減) – 開発の省力化 (チューニング等) http://monoist.atmarkit.co.jp/feledev/news/2011/01/13ted.html より引用
  • 23. 複雑になる要因 階層型ストレージ • アクセス頻度に応じて、物理メディアを変更 – アクセス頻度が低い:回転数の低いSATAディスク – アクセス頻度が普通:SASディスク – アクセス頻度が高い:SSDやFusionIO – アクセス頻度が極めて高い:キャッシュを併用
  • 24. MySQLからハードディスクまで MySQL アプリ SQL処理 ストレージエンジン クエリキャッシュ バッファ 本体 MySQL システムコール ストレージ カーネル VFS・キャッシュ EXT3 エンジン ファイルシステム デバイスドライバ SATAハードディスク
  • 25. MySQLサーバの内部構造 クライアント管理 SQLのパースや、 クエリの最適化、 クエリキャッシュ等 ファイルシステムに データを保存する ストレージエンジン Linuxカーネルの ファイルシステム
  • 26. MySQLサーバの内部構造 クライアント管理 MySQL ストレージ SQLのパースや、 エンジン クエリの最適化、 クエリキャッシュ等 ファイルシステムに データを保存する ストレージエンジン Linuxカーネルの ファイルシステム
  • 27. ストレージエンジンの仕事 • 表形式のデータを保存する。 – 複数のカラム(数値、文字列等)が集まった行 – 複数の行が集まった表 – 複数の表が集まったデータベース • 表から、検索条件に見合う行(に含まれるカラ ム)を検索・取得する。
  • 28. ストレージエンジンの仕事 • 表形式のデータを保存する。 – 複数のカラム(数値、文字列等)が集まった行 – 複数の行が集まった表 – 複数の表が集まったデータベース • 表から、検索条件に見合う行(に含まれるカラ ム)を検索・取得する。 • 検索しやすい形式でデータを記録する。
  • 29. 検索の仕方 1. 順次走査検索(grep型) – データの内容を一件ずつ検索条件と比較する。 – 挿入のコストはO(1)、検索のコストはO(n) 2. インデックス検索 – あらかじめ、検索用の小さな索引(インデックス) を作成しておき、高速に検索する。 – インデックスの作成方法がたくさんある – MySQLであれば原則B木(B-tree) 挿入・検索のコストはO(log n)
  • 30. データ本体の格納場所 • クラスタードインデックス(InnoDB等) – プライマリキーのB木の末端に、直接その行の データ本体を記録する。 – プライマリキーからの検索であれば、B木を一回 たどるだけで取得可能 – プライマリキー以外での検索は、セカンダリーイ ンデックスの末端にプライマリキーを格納し、2回 B木をたどる。
  • 31. インデックスが高速な理由 1. そもそも検索コストが低い – O(n)に対して、O(log n)しか計算量が増えない。 – データ量が、1MB→10MBに増えたときに検索時 間が0.01秒から0.1秒に10倍に増えたと仮定。 – 10MB→100MBに増えた場合: 逐次検索:さらに10倍に増えて、1秒 インデックス検索:2倍しか増えず、0.2秒
  • 32. インデックスが高速な理由 2. アクセスするデータ量が少ない – OSのページキャッシュに残る可能性が上がる – 1GBのデータ本体、100MBのインデックス 逐次検索:毎回、平均500MBを読み取り インデックス検索:毎回、平均50MBを読み取り (実際はB木の辿った部分のみでさらに少ない) – インデックスがページキャッシュからあふれると、 一気に性能が务化
  • 33. インデックスの更新 • インデックスが更新されるケース – データの追加・削除 – インデックスを張っているデータの変更 • 何が起きるか – B木が深くなり、効率が下がる – インデックスを詰めるのは大変 →削除マークをつけて無視する – インデックスのサイズが増える→メモリから溢れる • 不必要なインデックスは作らないことも重要
  • 34. MySQLサーバの内部構造 クライアント管理 SQLのパースや、 クエリの最適化、 クエリキャッシュ等 ファイルシステムに データを保存する MySQL ストレージエンジン パース等 Linuxカーネルの ファイルシステム
  • 35. SQLのパース処理 • SQLのパースは案外重い – 上半分をまるまる差し替える DeNA Handlersocket plugin • クエリキャッシュをうまく使う – プリペアドステートメントはキャッシュ効かないorz この辺は個別ノウハウの かたまりなので今回は割愛