1-1 DBサバにおけるOSの役割
アプリ、DBMS状態を読み取る
パフォーマンス解析ひとことめも
osで処理が実行される仕組みと制御
- プロセス、スレッドは実行の単位
- osが劇場、アプリ・DBMSは劇、プロセス・スレッドが役者ってイメージがいいかも。
- DBやwebサバだって結局はプロセス・スレッドなんだから、OSの制御からは逃れられないよ。
- じゃ、プロセスって何よ
- プログラム(バイナリ)がos上で実体を持って実行できる状態ですね。
- プログラム⇒ファイル、プロセス⇒メモリにロードされたもの
コネクションプーリング
-
- osにとってのコストになるプロセス、スレッドの生成処理の必要がなくなる
- みんなで共有するから接続数も少なくてすむ
cpu使用率って結局何%までならオーケー?
- cpu使用率のしきい値はOLTPとバッチの2パターンから考えるべき。安全率は20〜40%と見る。
- cpu待ちが多くなければ、cpu使用率は高くても問題ない
プリエンプション
- cpuの横取りで優先順の高いプロセスをcpuに渡す。osがタスクの優先度に基づいてタスク処理をさばくってことね。
リアルタイムクラス
- 何よりも最優先として処理しちゃうタスク、あんまし使えません。
- 使うならクラスタソフトの生死確認デーモンとか特別のものだけにしてね。
cpu使用率が高い場合、アプリ、DBが何ができるか
- アプリ
- 繰り返しが多くなってるのはどこだよー。やっぱしループが一番のボトルネックなんだよ。シンプルなハナシ。
- DBMS
- SQLでアクセスするブロック数減らしてあげる
- なんだかんだテーブルのフルスキャンってのはcpuも食います
プログラムとDBのパフォーマンスは使う人次第
- たとえばデータすべてを取得して1行ずつ処理する場合、1行ずつとってループでまわすより、フルスキャンしてまわしたほうが早い。
- なぜならインデックススキャンはインデックスをたどってシークするから、かならず2ページ以上読むから。全件全部を処理するならフルスキャンならそのページだけで済む。
アプリ、DBはマルチコアで必ず早くなるんかい
やっぱりかなり重要、osのタスク管理
- 生成⇒実行可能待ち⇒実行⇒待機(スリープ)⇒ゾンビ