Search

OakieTags

Who's online

There are currently 1 user and 24 guests online.

Online users

Recent comments

Affiliations

cache buffers chainsラッチミス

前回(同時4セッションIn-Memory Parallel Query)でcache buffers chainsラッチミスが気になった。

  • Non Parallel Query -> buffer_cacheに読み込む
  • Parallel Query   -> buffer_cacheは使わない

が、まず基本です。そして、発行されるReadの種類も違います:

  • Non Parallel Query -> sequential read, scattered read
  • Parallel Query -> direct path read

Non Parallel Queryの2種類のReadの使い分けは:

  • sequential read -> Index検索
  • scattered read -> full scan

そして、ほとんどIndex検索ができないTPC-Hを複数セッションで同時に動かすと、full scanのscattered readがbuffer_cacheを奪い合い、cache buffers chainsラッチミスが発生します。
で、今回はIn-Memory Parallelのテストでこれが発生したのだから、
In-Memory PQもNon Parallelと同じようなReadでbuffer_cacheにデータを読み込むということが判ります。
In-Memory Parallel Queryも -> sequential read, scattered read

始めからデータベースバッファに全て入っていれば"cache buffers chains"の競合は起こらない。

でも、実際の環境では、全部のデータをデータベースバッファに入れておくことなんてできないから、
In-Memory Parallel Queryを使い始めるとcache buffers chainsラッチミスが多くなる。

  • cache buffers chainsラッチミスが一時的に大きくなるのは仕方がない
  • cache buffers chainsラッチミスが慢性的に発生しているときは
    • データ量に「見合わない」実メモリしか積んでいないと「あきらめる」
    • In-Memory Parallel Queryを使わない。pararell_degree_policy=MANUALに戻す。
  • 或いは、Partition化してbuffer_cacheに収まるサイズに縮小する

あきらめてもParallel Queryが動くのだから、けしてネガティブな対応ではないと思う。