關於aio的設定的討論

jeanron100發表於2015-06-15
之前在博文中分享過一個ora錯誤。

對於此,根據日誌分析了相關的ora錯誤,但是從客戶的角度還是希望能夠提前做些什麼,所以aio的設定就成為刻不容緩的一個任務。
但是對於aio的設定大家還是存在一定的分歧。在此貼出來供大家討論,在oracle官方文件中也沒有詳細的說明和建議。
首先aio的設定在/etc/sysctl.conf就有設定,裡面會指定一個最大值,即aio-max-nr
對於aio的監控可以從下面的地方進行監控。
cat /proc/sys/fs/aio-max-nr
在系統中會根據系統的使用情況有對應的變化。
關於async-io的監控,下面的一個部落格中有比較好的監控方案。可以參考一下
http://www.pythian.com/blog/troubleshooting-ora-27090-async-io-errors/
對於aio的設定有幾種不同的爭論。
在伺服器上存在兩個資料庫例項,一個session佔用在9000左右,另外一個訪問量極小,不到100個session的使用情況。
根據aio的設定。有一種計算思路為:
Machine AIO consumption  : 2,558,565
Machine AIO max limit : 3,145,728
Number of sessions connected PRODB1 : 9136
Number of sessions connected PRODB2 : 35
所以根據平均值得出每個session佔用的aio值為 : 2558565/9171 = 278.98… 我們假設為 280
PRODB1和PRODB2的最大session設定為: 27040,所以根據計算得出需要設定的aio值為: 27040x280 = 7,571,200

對此還有一種不同的思路,即從作業系統層面,能夠和資料庫進行直接對映的就是程式了,資料庫中的程式和作業系統程式由對應的對映關係,所以我們應該基於程式,即process來進行計算。
在專有伺服器模式下,計算思路即為:
Machine AIO consumption  : 2,558,565
Machine AIO max limit : 3,145,728
Number of sessions connected PRODB1 : 9136
Number of sessions connected PRODB2 : 35
所以根據平均值得出每個程式process佔用的aio值為 : 2558565/9171 = 278.98… 我們假設為 280
PRODB1和PRODB2的最大程式設定設定為: 18000+2000,所以根據計算得出需要設定的aio值為: 20000x280 = 5,600,000
看似不經意的調整,但是結果卻差別很大。

還有一種思路就是透過active session對應的程式情況進行計算,比如9000個session,但是active session只有1500左右,我們在這個時候假設併發為1500
根據併發情況得到一個aio的平均值,然後進行計算。
Machine AIO consumption  : 2,558,565
Machine AIO max limit : 3,145,728
Number of sessions connected PRODB1 : 9136 這個時候併發session為1500左右
Number of sessions connected PRODB2 : 35   這個時候假設併發為35
所以根據平均值得出每個程式process佔用的aio值為 : 2558565/1535 = 1666.81759… 我們假設為1666,相比之前的計算就差別很大了。
然後根據這個值來計算對應的aio最大值設定。假設這個時候最大的程式數為18000+2000=20000,所以根據計算得到的aio值就為:33,320,000
這個計算的值相比之前就差別太大了。
不過從不同的計算計算方式來看,個人還是傾向於第2種計算。當然這個問題也是持開放的態度,大家也可以提供意見,大家一起討論。

當然不能給客戶這三種思路讓他們選,我們也是把前兩種的思路結合起來,給了一個基本平均的值,這樣下來aio的設定不會奇高,增長幅度也差不多在30%左右,但是還是有一定幅度的提升, 對於其它的引數影響也不會有很大的梯度。
之後就是建議客戶計劃進行資料庫例項的重啟使得這些引數變更生效了。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1700615/,如需轉載,請註明出處,否則將追究法律責任。

相關文章