首页 数据库 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验证您的访问权限。步骤

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

所以,你在上一次聚会上拍了一些很棒的照片,但不幸的是,你拍的大部分照片都是红眼睛。照片本身很棒,但其中的红色眼睛有点破坏了图像。更不用说,其中一些派对照片可能来自您朋友的手机。今天,我们将看看如何从照片中去除红眼。什么原因导致照片中的眼睛发红?在使用闪光灯拍照时,红眼现象往往会出现。这是因为闪光灯的光线直接照射到眼睛后部,引起眼底血管反射光线,从而在照片中呈现红色眼睛的效果。幸运的是,随着技术的不断进步,现在一些相机已经配备了红眼修正功能,可以有效解决这一问题。通过使用这种功能,相机会在拍摄照片

如何解决Win11验证凭据失败的问题? 如何解决Win11验证凭据失败的问题? Jan 30, 2024 pm 02:03 PM

有win11用户在使用凭据登录时,收到的却是您的凭据无法验证的错误提示,这是怎么回事?小编调查此问题后,发现可能有几种不同的情况直接或者间接导致该问题,下面就和小编一起来看看吧。

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