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"文件。点击“结束进程”的按钮
