TableCache设置过小造成MyISAM频繁损坏_MySQL
转自老王的博客
前些天说了一下如何修复损坏的MyISAM表,可惜只会修复并不能脱离被动的境地,只有查明了故障原因才会一劳永逸。
如果数据库服务非正常关闭(比如说进程被杀,服务器断电等等),并且此时恰好正在更新MyISAM表,那么发生损坏的概率就比较大。今天我要说的是另一种情况:频繁的打开关闭MyISAM表文件造成MyISAM表损坏。
什么时候会出现频繁的打开关闭MyISAM表文件的情况呢?
先查看当前系统的table_cache设置,它的作用就是缓存表文件描述符,降低打开关闭表的频率,如果这个参数设置得过小,那么很快就会被占满,再有新请求过来的时候,就不得不关闭一些已打开的表以便为新请求腾出空间,从而出现频繁的打开关闭MyISAM表文件的情况:
mysql> show variables like 'table%';
再查看当前系统的打开表的情况:
mysql> show status like 'open%';
有两项关键的结果:Open_tables和Opened_tables,他们的名字类似,其含义的区别在于:
Open_tables:表示当前打开的表数目。
Opened_tables:表示累计已经打开的表数目。
那么如何判断table_cache是否设置合理呢?其判断尺度如下:
如果Opened_tables远大于Open_tables,并且Open_tables很接近table_cache,那么就说明table_cache偏小。
还要注意设置操作系统的参数,因为即便你把table_cache设置得很大,一旦超过了操作系统的限制也没用,可以按如下方法查询当前值:
ulimit -n
设置方法也很简单,比如设置成8k,可以这样:
vi /etc/security/limits.conf
* hard nofile 8192
* soft nofile 8192
这样设定比在/etc/rc.local里设定ulimit -n 8192更合理一些(参考链接)。
MySQL运行稳定后,查看open_files_limit参数:
mysql> show variables like '%open%';
在大量使用MyISAM的环境里,应该保证open_files_limit表类型至少是table_cache的二到三倍,这是因为每个MyISAM表都包括三个文件:一个表定义文件,一个表索引文件,一个表数据文件,详细介绍可以参考文档。而在Innodb的环境里,一个表只有一个文件,明白这些基本知识对解决问题很有帮助。
具体的数据库文件打开情况可以用lsof来查看:
lsof | grep MYI 或者 lsof | grep MYD
可以发现索引文件描述符是客户端共享的,数据文件则不是,你可以这样确认这一点:
lsof | egrep -i 'myd|myi' | awk '{++state[$NF]} END {for(key in state) print state[key], "/t", key}' | sort -nr
为了保险点,或许还要查查内核的相关参数,比如fs.file-max,这些细节往往会影响到MySQL:
sysctl -a | grep "file"
注意到以上这些因素,问题差不多就能解决了。不过还要注意一点,table cache不是越大越好:
http://www.freshbooks.com/blog/2008/09/09/now-were-flying/
http://www.mysqlperformanceblog.com/2009/11/16/table_cache-negative-scalability/
http://www.mysqlperformanceblog.com/2009/11/26/more-on-table_cache/
BTW:如果你比较懒惰,也可以用MySQL Performance Tuning Primer Script来判断参数是否合理

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用AppleID登入iTunesStore時,可能會在螢幕上拋出此錯誤提示「此AppleID尚未在iTunesStore中使用」。沒有什麼可擔心的錯誤提示,您可以按照這些解決方案集進行修復。修正1–更改送貨地址此提示出現在iTunesStore中的主要原因是您的AppleID個人資料中沒有正確的地址。步驟1–首先,開啟iPhone上的iPhone設定。步驟2–AppleID應位於所有其他設定的頂部。所以,打開它。步驟3–在那裡,打開“付款和運輸”選項。步驟4–使用面容ID驗證您的存取權限。步驟

有win11用戶在使用憑證登入時,收到的卻是您的憑證無法驗證的錯誤提示,這是怎麼回事?小編調查此問題後,發現可能有幾種不同的情況直接或間接導致該問題,以下就和小編一起來看看吧。

所以,你在上一次聚會上拍了一些很棒的照片,但不幸的是,你拍的大部分照片都是紅眼睛。照片本身很棒,但其中的紅色眼睛有點破壞了圖像。更不用說,其中一些派對照片可能來自您朋友的手機。今天,我們將看看如何從照片中去除紅眼。是什麼原因導致照片中的眼睛發紅?使用閃光燈拍照時,紅眼現象往往會出現。這是因為閃光燈的光線直接照射到眼睛後部,引起眼底血管反射光線,從而在照片中呈現紅色眼睛的效果。幸運的是,隨著技術的不斷進步,現在一些相機已經配備了紅眼修正功能,可以有效解決這個問題。透過使用此功能,相機會在拍照

PHP500錯誤全面指南:原因、診斷與修復在PHP開發過程中,我們常會遇到HTTP狀態碼為500的錯誤。這種錯誤通常被稱為"500InternalServerError",它是指在伺服器端處理請求時發生了一些未知的錯誤。在本文中,我們將探討PHP500錯誤的常見原因、診斷方法以及修復方法,並提供具體的程式碼範例供參考。 1.500錯誤的常見原因1.

很多朋友在使用電腦作業系統時,總會出現藍屏的狀況,就算是最新的win11系統,也難逃藍屏的命運,因此今天小編帶來了win11藍屏修復教程。無論大家有沒有遇過藍屏,都可以先學習一下,以備不時之需。 win11藍屏怎麼修復方法一1、如果我們如果遇到了藍屏,先重啟系統,查看是否能夠正常啟動。 2、可以正常啟動的話,右鍵點擊桌面上的“電腦”,選擇“管理”3、接著在彈出視窗左側展開“系統工具”,選擇“事件檢視器”4、在事件檢視器中,我們就可以看到具體是什麼問題導致的藍色畫面。 5.接著只要依照藍屏的狀況以及事

1.按win+r開啟運行窗口,輸入【regedit】回車,開啟註冊表編輯器。 2.在開啟的登錄編輯程式中,依序點選展開【HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun】,在右側空白處,點選右鍵選擇【新建-字串值】,並重新命名為【systray.exe】。 3.雙擊開啟systray.exe,將其數值資料修改為【C:WindowsSystem32systray.exe】,點選【確定】儲存設定。

標題:Table'table_name'ismarkedascrashedandshouldberepaired-如何解決MySQL報錯:表被標記為崩潰,需要修復,需要具體程式碼範例文章正文:MySQL是一種功能強大的關係型資料庫管理系統,被廣泛應用於各種網站和應用程式的開發中。然而,由於各種原因,有時我們可能會遇到一些錯誤和問題。其中

若您的電腦啟動後常出現藍色畫面現象,伴隨而來的可能是Windows系統對csrss.exe檔產生的嚴重錯誤(停止碼為0xF4)。現在就讓我們來看看它怎麼修復吧! csrss.exe藍色畫面如何修正先同時按"Ctrl+Alt+Del"按鍵,這時將會跳出來自MicrosoftWindows工作管理員的介面。點選「任務管理器」的選項卡,畫面列出所有正在執行的程式以及它們所佔用的資源狀況等資訊。再次點擊進入“進程”選項卡,再次點擊“映像名稱”,然後在該清單中找到"csrss.exe"檔案。點擊「結束進程」的按鈕
