Google で見つけられない質問が 1 つあります。
私は多くの Linux ボックスを持っていますが、そのほとんどは SLES または openSUSE で、さまざまなバージョンとカーネルを使用しています。そのうちのいくつかで、Oracle トランザクションが遅いという問題に直面しました。これは時々発生する問題で、そのときにボックスにログインすると、Oracle がカーネル関数 sync_page でブロックされていることがわかります。
# while :; do ps axo stat,pid,cmd,wchan | egrep '^D|^R'; echo --; sleep 5; done
D 3483 hald-addon-storage: polling ide_do_drive_cmd
Ds 4635 ora_dbw0_orcl sync_page
Ds 4637 ora_lgwr_orcl sync_page
Ds 4639 ora_ckpt_orcl sync_page
D 11210 oracleorcl (LOCAL=NO) sync_page
D 12457 [smtpd] sync_page
R+ 12458 ps axo stat,pid,cmd,wchan -
--
Ds 4635 ora_dbw0_orcl sync_page
Ds 4637 ora_lgwr_orcl sync_page
Ds 4639 ora_ckpt_orcl sync_page
D 11210 oracleorcl (LOCAL=NO) sync_page
R+ 12501 ps axo stat,pid,cmd,wchan -
--
Ds 4635 ora_dbw0_orcl sync_page
Ds 4637 ora_lgwr_orcl sync_page
Ds 4639 ora_ckpt_orcl sync_page
D 11210 oracleorcl (LOCAL=NO) sync_page
R+ 12535 ps axo stat,pid,cmd,wchan -
--
Ds 4635 ora_dbw0_orcl sync_page
Ds 4637 ora_lgwr_orcl sync_page
Ds 4639 ora_ckpt_orcl sync_page
D 11210 oracleorcl (LOCAL=NO) sync_page
R+ 12570 ps axo stat,pid,cmd,wchan -
--
だから、そのボックスはディスクバッファのメモリが不足していると思うが、メモリは正常である
total used free shared buffers cached
Mem: 4149084 3994552 154532 0 0 2424328
-/+ buffers/cache: 1570224 2578860
Swap: 3148700 750696 2398004
これが問題だと思います。バッファがゼロなのでディスクに直接書き込む必要がありますが、 なぜバッファがゼロなのですか?- グーグルで検索してみましたが何も見つかりません。誰か助けてくれませんか?
答え1
Oracle DBMS は OS のバッファをバイパスし、ブロック デバイスに直接書き込みます。トランザクションが遅くなるのは、バッファが使用されていないことが原因ではないと思います。
答え2
free
カーネルが使用しているバッファの量を示します。どれだけ利用できるかではなくカーネル バッファは合計メモリから取得されるため、この場合、カーネルはバッファ用に 0/4149084 の使用可能なメモリを使用しています。これはお客様の問題ではないと考え、Oracle 関連の問題が発生している理由を調べるために新しい質問を作成します。