一、磁盤滿了之后MySQL會做什么?

創(chuàng)新互聯(lián)服務(wù)項目包括興城網(wǎng)站建設(shè)、興城網(wǎng)站制作、興城網(wǎng)頁制作以及興城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,興城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到興城省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
我們看下官方的說法:
When a disk-full condition occurs, MySQL does the following:
* It checks once every minute to see whether there is enough space to write the current row. If there is enough space,it continues as if nothing had happened.
* Every 10 minutes it writes an entry to the log file, warning about the disk-full condition.
其實MySQL本身并不會做任何操作,如官方文檔說說,只會每分鐘check一次是否有空閑空間,并且10分鐘寫一次錯誤日志。
但是再次期間由于磁盤滿了,意味著binlog無法更新,redo log也無法更新,所有buffer
pool中的數(shù)據(jù)無法被flush上,如果不幸的服務(wù)器重啟,或者實例被kill了,那必然會造成數(shù)據(jù)丟失,這幾乎是一定的。所以,處理磁盤滿的問題最好是先釋放出來一定空間讓dirty數(shù)據(jù)刷新下來。
二、磁盤滿了為什么會導(dǎo)致操作hang住?
1、select
首先經(jīng)過經(jīng)驗和實際測試,select操作不會由于磁盤滿導(dǎo)致問題,也就是所有select操作都會正常運行。
2、insert
經(jīng)過不通的測試發(fā)現(xiàn),當(dāng)磁盤滿了之后,并不是第一個insert就卡住,而是會在n個之后出現(xiàn)卡住的情況。
通過查看error日志,發(fā)現(xiàn)卡住現(xiàn)象和刷磁盤的操作有關(guān)系。
[ERROR] /usr/local/mysql-5.1.42/libexec/mysqld: Disk is full writing './test/cj_webex.MYD'
[ERROR] /usr/local/mysql-5.1.42/libexec/mysqld: Disk is full writing './mysql-bin.000017'
為了驗證推論是否正確,我們將sync_binlog設(shè)置為1,在這種情況下,insert第一條就卡住了,并且error
log中直接報錯提示寫binlog失敗。看來卡住確實和刷磁盤有關(guān)系。
目前已知和刷磁盤有關(guān)系的參數(shù)有3個,分別是sync_binlog,innodb_flush_log_tr_commit和duoblewrite。
3、show slave status
在從庫經(jīng)過測試,操作會被卡住,這主要是由于執(zhí)行show slave
status需要獲得LOCK_active_mi鎖,然后鎖上mi-data_lock,但是由于磁盤滿了無法將io_thread中的數(shù)據(jù)寫入到relay
log中,導(dǎo)致io_thread持有mi-data_lock鎖,這就導(dǎo)致了死鎖。
所以,這就導(dǎo)致在磁盤滿的情況下,執(zhí)行show slave status操作會卡住。
4、show status
測試可以正常操作,但是如果先執(zhí)行了show slave status操作的情況下,show
status也會被卡住。這是因為執(zhí)行show status需要鎖上LOCK_status,而由于status狀態(tài)中包含slave
status,所以還需要鎖上LOCK_active_mi。如果限制性了show slave
status,這時候由于mi-data_lock死鎖問題,導(dǎo)致io_thread不會釋放LOCK_active_mi鎖。這時候就導(dǎo)致show
status和show slave status爭搶同一把LOCK_active_mi鎖,也形成了死鎖。
所以,在磁盤滿的情況下,如果先執(zhí)行show slave status,后執(zhí)行show status,連個操作都會卡住。
生產(chǎn)環(huán)境中,MySQL 不經(jīng)意間吃掉全部的內(nèi)容,然后開始吃掉 SWAP,性能一降再降,怎么辦?
可以從下面三點查看原因:
MySQL 使用內(nèi)存,有兩個途徑。
永久占用的內(nèi)容
比如全局緩沖區(qū)(Global Buffer)類別,是在服務(wù)器啟動期間從操作系統(tǒng)獲得的,不會釋放到任何一個別的進程。
動態(tài)請求的內(nèi)存
線程緩沖區(qū)由MySQL使用,它是在處理新查詢時從操作系統(tǒng)請求的內(nèi)存。在執(zhí)行查詢之后,該內(nèi)存被釋放回操作系統(tǒng)。
這意味著 MySQL 的內(nèi)存使用,是 全局緩沖區(qū) 加上 線程緩沖區(qū) 以及 允許的最大連接數(shù) 。
對于專用數(shù)據(jù)庫服務(wù)器,該值需要保持在服務(wù)器內(nèi)存的90%以下。在共享服務(wù)器的情況下,它應(yīng)該保持在服務(wù)器內(nèi)存的50%以下。
檢查一下 MySQL 設(shè)置,有助于確定內(nèi)存使用情況,從而為 MySQL 分配合適的值。
一個近似的公式:
當(dāng)網(wǎng)站受到攻擊時,有可能在短時間內(nèi)建立異常高的連接數(shù)量。MySQL 中的 PROCESSLIST 可用于檢測頂級用戶并阻止對濫用連接的訪問。
找出查詢需要很長時間才能執(zhí)行的語句,因為這些查詢需要進一步優(yōu)化服務(wù)器才能更好地執(zhí)行,可以通過服務(wù)器查詢?nèi)罩具M行識別。由于查詢速度慢,導(dǎo)致磁盤讀取較多,導(dǎo)致內(nèi)存和CPU使用率較高,影響服務(wù)器性能。
最后,到了加內(nèi)存條的時候了。雖然在優(yōu)化數(shù)據(jù)庫設(shè)置之后,服務(wù)器會不斷地路由到使用交換內(nèi)存,但也必須增加內(nèi)存。俗話說:“巧婦難為無米之炊”,就是這個意思。
上面說的這些方向,大家可以在實際操作中驗證體會,希望大家在數(shù)據(jù)庫優(yōu)化的路上,麻溜順暢,砥礪前行。
在對MySQL 8.0.26 vs GreatSQL 8.0.25的對比測試過程中,有一個環(huán)節(jié)是人為制造磁盤滿的場景,看看MGR是否還能正常響應(yīng)請求。
在實測過程中,最后發(fā)現(xiàn)磁盤滿的那個節(jié)點,持續(xù)時間足夠久后,會因為內(nèi)存消耗過大而最終被OS給OOM Kill。
這個問題我已報告BUG(#104979),下面是該過程的詳細(xì)記錄。
首先,直接利用dd復(fù)制空文件填滿磁盤。
disk full報告過程及何時被oom killed
來看下MySQL 8.0.26遇到disk full時日志都輸出哪些內(nèi)容:
從disk full時刻開始,大約過了2.5小時,mysqld進程內(nèi)存消耗持續(xù)上升,最終引發(fā)oom kill
在這期間某個時刻抓到的待認(rèn)證事務(wù)堆積,在被oom kill前實際不止這么多:
關(guān)注mysqld進程內(nèi)存消耗變化
下面是mysqld進程內(nèi)存消耗變化情況
OS層oom-killer相關(guān)日志:
GreatSQL 8.0.25測試過程
作為對比,我用GreatSQL 8.0.25也做了同樣的測試。
從日志詳情中可以看到,當(dāng)磁盤空間滿了之后,GreatSQL會將那個節(jié)點主動退出集群,對整個集群的影響非常小。
此外,從集群退出后,也不會再接收認(rèn)證事務(wù)了,所以也沒發(fā)生內(nèi)存持續(xù)暴漲最終被oom killed的情況,實際觀察過程中發(fā)現(xiàn)內(nèi)存反倒還下降了
這樣對比來看,GreatSQL的可靠性還真是可以的,官方的MySQL MGR的可靠性還有待進一步加強呀。
Enjoy GreatSQL :)
可以通過查看mysql進程來實現(xiàn)。 進入mysql命令行客戶端,選擇數(shù)據(jù)庫后,執(zhí)行show processlist命令: 多刷新幾次,可以看到最后執(zhí)行的SQL語句,以此判斷什么查詢在占用資源。
網(wǎng)站標(biāo)題:mysql盤滿了怎么處理 sql數(shù)據(jù)庫磁盤滿了怎么辦
本文來源:http://chinadenli.net/article38/dodjgsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、手機網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計、域名注冊、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)