1-1 DBサバにおけるOSの役割

アプリ、DBMS状態を読み取る

パフォーマンス解析ひとことめも
  • デュアルコアマルチプロセッサを考慮した解析をしないとだめだよ
  • cpuが100%の状態でload avg, run queueもしくはuser timeが少ない場合は1つのプロセスがずっと動き続けてるってことだよ。
  • osのcpuが0%だったらDBにクエリ届いてるかNTまわりも確認する。
  • デュアルコアで1つのcpuをフルで使うと50%ってcpu使用率がずっと続く
  • Privileged Timeが大きすぎるのはおかしい。os内部で何か起こってる可能性が高い
winパフォーマンスモニタ
  • Processor
    • Privileged Time
      • osが使ってる、cpu
      • vmstatで言うsys
    • User Time
      • ユーザプログラムが使ってる
      • vmstatで言うuser
  • System
    • Processor Queue Length
      • プロセス待ちの数量
      • topのLoad avgみたいなもの
    • Avg Disk Queue Lenght
      • I/O負荷でwaitしているプロセス
      • vmstat->cpu->waとおなじ

osで処理が実行される仕組みと制御

  • プロセス、スレッドは実行の単位
    • osが劇場、アプリ・DBMSは劇、プロセス・スレッドが役者ってイメージがいいかも。
    • DBやwebサバだって結局はプロセス・スレッドなんだから、OSの制御からは逃れられないよ。
  • じゃ、プロセスって何よ
    • プログラム(バイナリ)がos上で実体を持って実行できる状態ですね。
    • プログラム⇒ファイル、プロセス⇒メモリにロードされたもの
コネクションプーリング
    • osにとってのコストになるプロセス、スレッドの生成処理の必要がなくなる
    • みんなで共有するから接続数も少なくてすむ
cpu使用率って結局何%までならオーケー?
  • cpu使用率のしきい値はOLTPとバッチの2パターンから考えるべき。安全率は20〜40%と見る。
  • cpu待ちが多くなければ、cpu使用率は高くても問題ない
プリエンプション
  • cpuの横取りで優先順の高いプロセスをcpuに渡す。osがタスクの優先度に基づいてタスク処理をさばくってことね。
リアルタイムクラス
  • 何よりも最優先として処理しちゃうタスク、あんまし使えません。
  • 使うならクラスタソフトの生死確認デーモンとか特別のものだけにしてね。

cpu使用率が高い場合、アプリ、DBが何ができるか

  1. アプリ
    • 繰り返しが多くなってるのはどこだよー。やっぱしループが一番のボトルネックなんだよ。シンプルなハナシ。
  2. DBMS
    • SQLでアクセスするブロック数減らしてあげる
    • なんだかんだテーブルのフルスキャンってのはcpuも食います
プログラムとDBのパフォーマンスは使う人次第
  • たとえばデータすべてを取得して1行ずつ処理する場合、1行ずつとってループでまわすより、フルスキャンしてまわしたほうが早い。
    • なぜならインデックススキャンはインデックスをたどってシークするから、かならず2ページ以上読むから。全件全部を処理するならフルスキャンならそのページだけで済む。

アプリ、DBはマルチコアで必ず早くなるんかい

  • キホン、1プロセス100%だった場合50%になるだけ。クロックあがったわけじゃないから、1プロセスへの処理時間が変わるわけじゃない。
    • つまりレスポンスタイムは変わらない。
  • 変わるのは複数プロセスに対するスループット!並列で処理できるから。
  • DBMSでロックしてボトルネック作ってたら正直あんましマルチコアにしても意味がない。なんだかんだクロックアップが最強。

やっぱりかなり重要、osのタスク管理

  • 生成⇒実行可能待ち⇒実行⇒待機(スリープ)⇒ゾンビ