Буферная память ядра Linux равна нулю - PullRequest
2 голосов
/ 27 декабря 2010

Есть один вопрос, который я не могу найти в Google.

У меня много Linux-боксов, в основном с SLES или openSUSE, различными версиями и ядрами.На некоторых из них я столкнулся с проблемой медленных оракулов.Время от времени проблема, и когда я вхожу в окно в это время, я вижу, что оракул заблокирован в функции ядра 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

Я думаю, что это проблема, буфер равен нулю, и мы должны записать непосредственно на диск, но почему буфер равен нулю - я пытаюсь найти его в Google и ничего не найти - кто-нибудь может помочь?

UPD

billing@Billing-server:~> uname -a
Linux Billing-server 2.6.18.2-34-bigsmp #1 SMP Mon Nov 27 11:46:27 UTC 2006 i686 i686 i386 GNU/Linux

1 Ответ

2 голосов
/ 29 декабря 2010

База данных Oracle использует флаг O_DIRECT, чтобы специально запросить, чтобы ядро ​​ не буферизовало свой доступ к диску - Oracle выполняет собственную буферизацию.

Ваши результаты показывают, что вы насыщаете доступную пропускную способность диска.

...