Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Masahiro NAKAYAMA
4,540 views
社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会 データベースとOSのファイルアクセス
Technology
◦
Read more
45
Save
Share
Embed
Embed presentation
Download
Downloaded 137 times
1
/ 35
2
/ 35
3
/ 35
4
/ 35
5
/ 35
6
/ 35
7
/ 35
8
/ 35
9
/ 35
10
/ 35
11
/ 35
12
/ 35
13
/ 35
14
/ 35
15
/ 35
16
/ 35
17
/ 35
18
/ 35
19
/ 35
20
/ 35
21
/ 35
22
/ 35
23
/ 35
24
/ 35
25
/ 35
26
/ 35
27
/ 35
28
/ 35
29
/ 35
30
/ 35
31
/ 35
32
/ 35
33
/ 35
34
/ 35
35
/ 35
More Related Content
PDF
分散仮想ストレージシステム紹介
by
OSSラボ株式会社
PDF
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
by
System x 部 (生!) : しすなま! @ Lenovo Enterprise Solutions Ltd.
PDF
10年効く分散ファイルシステム技術 GlusterFS & Red Hat Storage
by
Etsuji Nakai
PDF
Gluster fsにおいて内在するincident要因
by
TaikaiSebastianHirose
PDF
Comparing GlusterFS Swift API to Native Swift
by
Etsuji Nakai
PDF
Quick Introduction to GlusterFS
by
Etsuji Nakai
PDF
10分で分かるLinuxブロックレイヤ
by
Takashi Hoshino
PDF
仮想ネットワーク構築8枚slide
by
k009c1271
分散仮想ストレージシステム紹介
by
OSSラボ株式会社
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
by
System x 部 (生!) : しすなま! @ Lenovo Enterprise Solutions Ltd.
10年効く分散ファイルシステム技術 GlusterFS & Red Hat Storage
by
Etsuji Nakai
Gluster fsにおいて内在するincident要因
by
TaikaiSebastianHirose
Comparing GlusterFS Swift API to Native Swift
by
Etsuji Nakai
Quick Introduction to GlusterFS
by
Etsuji Nakai
10分で分かるLinuxブロックレイヤ
by
Takashi Hoshino
仮想ネットワーク構築8枚slide
by
k009c1271
What's hot
PDF
Kernel ext4
by
Kai Sasaki
PDF
Linux Namespace
by
Masami Ichikawa
PDF
20120913 nosql@hikarie(okuyama fuse)
by
Takahiro Iwase
PDF
バックアップとリストアの基礎
by
Kazuki Takai
PPT
Linux/DB Tuning (DevSumi2010, Japanese)
by
Yoshinori Matsunobu
PDF
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
by
Taira Hajime
PPTX
Consistency level
by
Kazutaka Tomita
PDF
10分で分かるデータストレージ
by
Takashi Hoshino
PDF
Btrfsの基礎 part1 機能編
by
fj_staoru_takeuchi
PDF
バックアップ勉強会#1 バックアップ基礎
by
MKT International Inc.
PDF
Mobageの技術を体験(MyDNS編)
by
Daisuke Ikeda
PDF
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
by
Satoshi Shimazaki
PDF
WalBの紹介
by
Takashi Hoshino
PDF
LTO/オートローダー/仮想テープライブラリの基礎知識
by
MKT International Inc.
PDF
一歩進んだXen仮想化環境構築
by
VirtualTech Japan Inc.
PPTX
Cassandraバージョンアップ&移設
by
Takehiro Torigaki
PDF
10分で分かるバックアップとレプリケーション
by
Takashi Hoshino
PDF
PowerDNSのご紹介
by
Akira Matsuda
PPT
Sfstudy#2チーム5
by
Yasuhiro Arai
PDF
Microsoft power point ai fss 製品概要-4-4 [互換モード]
by
龍雄 炭田
Kernel ext4
by
Kai Sasaki
Linux Namespace
by
Masami Ichikawa
20120913 nosql@hikarie(okuyama fuse)
by
Takahiro Iwase
バックアップとリストアの基礎
by
Kazuki Takai
Linux/DB Tuning (DevSumi2010, Japanese)
by
Yoshinori Matsunobu
マルチAZ対応!AWS上で稼働するスケールアウトNAS Red Hat Storage
by
Taira Hajime
Consistency level
by
Kazutaka Tomita
10分で分かるデータストレージ
by
Takashi Hoshino
Btrfsの基礎 part1 機能編
by
fj_staoru_takeuchi
バックアップ勉強会#1 バックアップ基礎
by
MKT International Inc.
Mobageの技術を体験(MyDNS編)
by
Daisuke Ikeda
OSC2012Kansai@Kyoto 自宅SAN友の会 - インフラエンジニアなら知っておきたい ストレージのはなし
by
Satoshi Shimazaki
WalBの紹介
by
Takashi Hoshino
LTO/オートローダー/仮想テープライブラリの基礎知識
by
MKT International Inc.
一歩進んだXen仮想化環境構築
by
VirtualTech Japan Inc.
Cassandraバージョンアップ&移設
by
Takehiro Torigaki
10分で分かるバックアップとレプリケーション
by
Takashi Hoshino
PowerDNSのご紹介
by
Akira Matsuda
Sfstudy#2チーム5
by
Yasuhiro Arai
Microsoft power point ai fss 製品概要-4-4 [互換モード]
by
龍雄 炭田
Similar to 社内サーバインフラ勉強会(DB)
PDF
Osc2011 Do
by
Kazuhisa Hara
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
PDF
PHPで大規模ブラウザゲームを開発してわかったこと
by
Kentaro Matsui
PDF
Enter the-dolphine
by
Mikiya Okuno
PPT
081108huge_data.ppt
by
Naoya Ito
PDF
My sqlとplugin
by
techtalkdwango
PDF
DTraceによるMySQL解析ことはじめ
by
Mikiya Okuno
PDF
オープニングセッション
by
konekto
PDF
PostgreSQLバックアップの基本
by
Uptime Technologies LLC (JP)
PDF
MySQL de NoSQL Fukuoka
by
Ryusuke Kajiyama
PDF
いまさら聞けないPostgreSQL運用管理
by
Uptime Technologies LLC (JP)
PDF
MySQL 5.5 Update #denatech
by
Mikiya Okuno
PDF
CLUB DB2 第122回 DB2管理本の著者が教える 簡単運用管理入門
by
Akira Shimosako
PDF
PostgreSQLアーキテクチャ入門
by
Uptime Technologies LLC (JP)
PDF
PostgreSQL安定運用のコツ2009 @hbstudy#5
by
Uptime Technologies LLC (JP)
PDF
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法 by 株式会社日立製作...
by
Insight Technology, Inc.
PDF
Osc2012 spring HBase Report
by
Seiichiro Ishida
PDF
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
by
Masahito Zembutsu
ODP
MySQLのパフォーマンスの話
by
Tetsuro Ikeda
PDF
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
by
Ryota Watabe
Osc2011 Do
by
Kazuhisa Hara
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
PHPで大規模ブラウザゲームを開発してわかったこと
by
Kentaro Matsui
Enter the-dolphine
by
Mikiya Okuno
081108huge_data.ppt
by
Naoya Ito
My sqlとplugin
by
techtalkdwango
DTraceによるMySQL解析ことはじめ
by
Mikiya Okuno
オープニングセッション
by
konekto
PostgreSQLバックアップの基本
by
Uptime Technologies LLC (JP)
MySQL de NoSQL Fukuoka
by
Ryusuke Kajiyama
いまさら聞けないPostgreSQL運用管理
by
Uptime Technologies LLC (JP)
MySQL 5.5 Update #denatech
by
Mikiya Okuno
CLUB DB2 第122回 DB2管理本の著者が教える 簡単運用管理入門
by
Akira Shimosako
PostgreSQLアーキテクチャ入門
by
Uptime Technologies LLC (JP)
PostgreSQL安定運用のコツ2009 @hbstudy#5
by
Uptime Technologies LLC (JP)
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法 by 株式会社日立製作...
by
Insight Technology, Inc.
Osc2012 spring HBase Report
by
Seiichiro Ishida
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
by
Masahito Zembutsu
MySQLのパフォーマンスの話
by
Tetsuro Ikeda
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
by
Ryota Watabe
More from Masahiro NAKAYAMA
PDF
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
by
Masahiro NAKAYAMA
PDF
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
by
Masahiro NAKAYAMA
PDF
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
by
Masahiro NAKAYAMA
PDF
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
by
Masahiro NAKAYAMA
PDF
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
by
Masahiro NAKAYAMA
PDF
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
by
Masahiro NAKAYAMA
PDF
サーバーレス時代の システム設計ワークショップ
by
Masahiro NAKAYAMA
PDF
#ssmjp 2018/12 技術系同人誌を手に入れよう
by
Masahiro NAKAYAMA
PDF
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
by
Masahiro NAKAYAMA
PDF
クラウドでハンズオンする話 #ssmjp
by
Masahiro NAKAYAMA
PPTX
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
by
Masahiro NAKAYAMA
PDF
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
by
Masahiro NAKAYAMA
PDF
Serverless book
by
Masahiro NAKAYAMA
PDF
クラウドではじめるリアルタイムデータ分析 #seccamp
by
Masahiro NAKAYAMA
PPTX
技術系同人誌を書こう #ssmjp
by
Masahiro NAKAYAMA
PDF
「サーバレスの薄い本」からの1年 #serverlesstokyo
by
Masahiro NAKAYAMA
PDF
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
by
Masahiro NAKAYAMA
PDF
IoT(Bluetooth mesh) × サーバーレス
by
Masahiro NAKAYAMA
PDF
Serverless Architecture Overview #cdevc
by
Masahiro NAKAYAMA
PDF
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
by
Masahiro NAKAYAMA
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
by
Masahiro NAKAYAMA
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
by
Masahiro NAKAYAMA
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
by
Masahiro NAKAYAMA
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
by
Masahiro NAKAYAMA
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
by
Masahiro NAKAYAMA
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
by
Masahiro NAKAYAMA
サーバーレス時代の システム設計ワークショップ
by
Masahiro NAKAYAMA
#ssmjp 2018/12 技術系同人誌を手に入れよう
by
Masahiro NAKAYAMA
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
by
Masahiro NAKAYAMA
クラウドでハンズオンする話 #ssmjp
by
Masahiro NAKAYAMA
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
by
Masahiro NAKAYAMA
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
by
Masahiro NAKAYAMA
Serverless book
by
Masahiro NAKAYAMA
クラウドではじめるリアルタイムデータ分析 #seccamp
by
Masahiro NAKAYAMA
技術系同人誌を書こう #ssmjp
by
Masahiro NAKAYAMA
「サーバレスの薄い本」からの1年 #serverlesstokyo
by
Masahiro NAKAYAMA
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
by
Masahiro NAKAYAMA
IoT(Bluetooth mesh) × サーバーレス
by
Masahiro NAKAYAMA
Serverless Architecture Overview #cdevc
by
Masahiro NAKAYAMA
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
by
Masahiro NAKAYAMA
社内サーバインフラ勉強会(DB)
1.
サーバインフラ勉強会 データベース編
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ではメモリが足りる限りページキャッシュ を残す。 • 実際にはページキャッシュに書いた時点で、 システムコールはアプリに処理を戻す。
15.
ページキャッシュ http://www.atmarkit.co.jp/flinux/special/kernel26/kernel26_01c.html より引用
16.
MySQLからハードディスクまで
MySQL アプリ SQL処理 ストレージエンジン クエリキャッシュ バッファ 本体 システムコール カーネル VFS・キャッシュ EXT3 ファイルシステム 次はここ デバイスドライバ SATAハードディスク
17.
SATAハードディスクへの読み書き • 基本的な動作(単体のSATAディスクの場合) 1.
デバイスドライバがSATAのコマンドを作成 2. SATAインターフェースカードがコマンドをSATA ケーブルに送信 3. ハードディスクがSATAコマンドを受信 4. 書き込み位置にヘッドを移動 5. 回り続けるディスクで、ヘッドの下に書き込み位 置が来たところで磁気を使って書き込み
18.
複雑になる要因
コマンドキューイング • ハードディスクが遅い最大要因: • 「回り続けるディスクで、ヘッドの下に書き込み位 置が来たところで磁気を使って書き込み」 • 物理的に近いものをまとめて読み書き →コマンドをいったん待ち行列に入れ(キューイン グ)、都合の良い順序に入れ替え
19.
複雑になる要因 コマンドキューイング http://ascii.jp/elem/000/000/346/346448/index-2.html より引用
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 この辺は個別ノウハウの かたまりなので今回は割愛
Download