首頁 資料庫 mysql教程 TableCache设置过小造成MyISAM频繁损坏_MySQL

TableCache设置过小造成MyISAM频繁损坏_MySQL

Jun 01, 2016 pm 01:51 PM
修復 如何 数据库服务

转自老王的博客

前些天说了一下如何修复损坏的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来判断参数是否合理

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

此 Apple ID 尚未在 iTunes Store 中使用:修復 此 Apple ID 尚未在 iTunes Store 中使用:修復 Jun 10, 2024 pm 05:42 PM

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

如何解決Win11驗證憑證失敗的問題? 如何解決Win11驗證憑證失敗的問題? Jan 30, 2024 pm 02:03 PM

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

如何修復iPhone上的紅眼 如何修復iPhone上的紅眼 Feb 23, 2024 pm 04:31 PM

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

PHP 500錯誤全面指南:原因、診斷與修復 PHP 500錯誤全面指南:原因、診斷與修復 Mar 22, 2024 pm 12:45 PM

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

解決Win11藍屏問題的簡易指南 解決Win11藍屏問題的簡易指南 Dec 27, 2023 pm 02:26 PM

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

WIN10音量無法調整進行修復的操作方法 WIN10音量無法調整進行修復的操作方法 Mar 27, 2024 pm 05:16 PM

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

Table 'table_name' is marked as crashed and should be repaired - 如何解決MySQL報錯:表被標記為崩潰,需要修復 Table 'table_name' is marked as crashed and should be repaired - 如何解決MySQL報錯:表被標記為崩潰,需要修復 Oct 05, 2023 am 09:25 AM

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

如何解決csrss.exe導致的藍色畫面問題 如何解決csrss.exe導致的藍色畫面問題 Dec 28, 2023 pm 06:24 PM

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

See all articles