同一条sql insert 有时快有时慢 引发的血案
??同一條sql語句,為什么有時插入塊,有時插入慢原因剖析
?
?
?
?
背景:同一條sql ,有時插入時間幾毫秒,有時插入時間幾十毫秒,為什么?
Sql角度:簡單insert
表角度: 一個主鍵
系統(tǒng)參數(shù)角度:
開啟了雙1 策略。
也就意味著每次事物就會有刷新磁盤
關(guān)閉雙1 ,設(shè)置為 0 100 ,或者 2 100 ,會極大提升性能。這是因為不刷硬盤了,但不能解決為什么時快時慢問題
?
操作系統(tǒng)角度
iostat -xmd 1? 看磁盤
?
?
?
?
磁盤 不夠快啊。 讀寫0.15M 就使用了7%
?
?
來個順序文件拷貝, 30M 使用 100%。 離散讀寫更慢了
使用sar -B 1 可以查看頁面交換
?
?
pgpgin/s:表示每秒從磁盤或SWAP置換到內(nèi)存的字節(jié)數(shù)(KB)
pgpgout/s:表示每秒從內(nèi)存置換到磁盤或SWAP的字節(jié)數(shù)(KB)
fault/s:每秒鐘系統(tǒng)產(chǎn)生的缺頁數(shù),即主缺頁與次缺頁之和(major + minor)
majflt/s:每秒鐘產(chǎn)生的主缺頁數(shù).
pgfree/s:每秒被放入空閑隊列中的頁個數(shù)
pgscank/s:每秒被kswapd掃描的頁個數(shù)
pgscand/s:每秒直接被掃描的頁個數(shù)
pgsteal/s:每秒鐘從cache中被清除來滿足內(nèi)存需要的頁個數(shù)
%vmeff:每秒清除的頁(pgsteal)占總掃描頁(pgscank+pgscand)的百分比
?
這表示 內(nèi)存和 swap 或者硬盤 有頻繁的數(shù)據(jù)交換
2 哪個進程使用swap 呢
?
for i in $(ls /proc | grep "^[0-9]" | awk '$0>100'); do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head
?
在經(jīng)過 幾個小時后 ,mysql 使用 swap 由 88M 變成了104M , 說明一直在使用和增加的。
?
問題基本定位
?
磁盤使用頻率不穩(wěn)定,導(dǎo)致了mysql的插入時間會時快時慢
?
如何解決
? 把swapness 降為1
sysctl vm.swappiness=1???? 并且 /etc/sysctl.conf? 中設(shè)置為1
2? 降低內(nèi)存 innodb_buffer_pool_size =4G? 原來6G ,節(jié)約一部分內(nèi)存空
3 開啟innodb_numa_interleave = ON??? 來操作numa
? ? ? ?4?更換SSD 或者不用開啟雙1,改成 2? 100
?
?
只調(diào)整操作系統(tǒng)參數(shù),不更換硬件,依然開啟雙一,重啟mysql之后呢
?
?
?
可以看到mysql已經(jīng)不再使用 swap 空間了
但是因為雙一參數(shù)的使用,每次事物都會刷磁盤,而這個機械磁盤的性能在隨機讀寫的情況下不穩(wěn)定。會依然存在時快時慢的問題。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/fangxuanlang/p/10439524.html
總結(jié)
以上是生活随笔為你收集整理的同一条sql insert 有时快有时慢 引发的血案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swap空间扩容
- 下一篇: 【Solr】- Tomcat部署