REPAIR TABLE导致死锁

问题表现:
以 discuz 论坛的帖子数据表(cdb_posts)为例,该表有 887106 条记录,正常情况下,在一个 P4 2.4G、1G 内存的 PC 机上执行 REPAIR TABLE 的耗时大概 95s,如下:

mysql> SHOW GLOBAL VARIABLES LIKE 'myisam_repair_threads';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| myisam_repair_threads | 1     | 
+-----------------------+-------+

mysql> REPAIR TABLE cdb_posts;
+-----------------+--------+----------+----------+
| Table           | Op     | Msg_type | Msg_text |
+-----------------+--------+----------+----------+
| Forum.cdb_posts | repair | status   | OK       | 
+-----------------+--------+----------+----------+
1 row in set (1 min 35.58 sec)

技术相关:

[MySQL优化案例]系列 -- 无法使用查询缓存

1. 先看当前的 QCACHE, hits 和 in_cache 均为 0

mysql>SHOW GLOBAL STATUS LIKE 'QCACHE%';

+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_hits             | 0        |
| Qcache_not_cached       | 1        |
| Qcache_queries_in_cache | 0        |
+-------------------------+----------+

mysql>SELECT * FROM `Weather` WHERE `AddTime` = 1185897600;

2. 第一次查询完之后,再来看下,not_cached 增加了 1, in_cache 变成 1,因为 SHOW GLOBAL STATUS LIKE 'QCACHE%' 本身不会放在 QCACHE 里的

mysql>SHOW GLOBAL STATUS LIKE 'QCACHE%';
+-------------------------+----------+

技术相关:

更新"MySQL复制 自动监控脚本"

具体代码请见: MySQL复制 自动监控脚本
增加了判断slave落后于master多少秒的机制。

[MySQL优化案例]系列 -- 带函数的查询条件

mysql>explain select * from tbl_name where date_format(EndTime, '%Y-%m-%d') >= '2007-08-08' AND
 date_format(EndTime, '%Y-%m-%d') set @dt='2007-08-08' ; set @dt1 = '2007-08-09';

mysql>explain select * from tbl_name where EndTime >= @dt AND EndTime 

技术相关:

ERROR 1206 (HY000): The total number of locks exceeds the lock table size 错误解决

错误现象如下:

mysql> DELETE FROM JHF_CP_SPOT_RATE WHERE FRONT_DATE = '20070801';
ERROR 1206 (HY000): The total number of locks exceeds the lock table size

把 delete 改成 select,再explain一下,发现返回结果高达300多万,于是检查 max_write_lock_count 的值,是 8446744073709551615,肯定够用了。
再看看 innodb_buffer_pool_size,我的天,才设置默认的 8M,该死的。加大到合适的值,重启 mysql,一切ok。

还有一招,就是delete时分成多次,每次用 LIMIT 限定记录数,这样也ok :)

关于注册及用邮件重置密码

由于之前的服务器是用虚拟主机的空间,因此邮件服务总是很不稳定,给大家带来了很大麻烦,现在的服务器已经支持邮件服务。那些注册后一直没有密码的朋友可以通过邮件重置密码了,如果还有什么问题,请给我留言,谢谢关注本站。

另外,由于服务器所在IDC的IP段被spamhaus加入黑名单了(我是清白的 :D),有不少限制比较严格的邮箱都无法使用,比如sina,hotmail等,请尽量试用163/126之类的,谢谢!

个人涂鸦:

您是北京人吗

公交车上,一名乘客拿着一张IC卡想替他的同伴也刷一次,结果司机先生死活也不肯。
相互争执了很久,司机先生操着浓重的北京问冒了这么一句话:您是北京人吗?
乘客回到:我不是北京人。北京人怎么了,你是北京人,还不得天天开车送我去上班!
掌声一片,希里哗啦的。。。。

个人涂鸦:

推出第一个免费工具CCT

太多次接到网友关于字符集问题的帮助需求了,最后主要集中在文件字符集的转换上,有些网友对转换过程不太熟悉,因此本站提供该工具:
转换文件内容字符集工具 Charset Convert Tool(CCT) ,主要是配合 小谈MySQL字符集 一起试用,欢迎报告bug。

个人涂鸦:

技术相关:

mysqlreport 文档

原文来自:http://hackmysql.com/mysqlreportdoc

mysqlreport 文档

mysqlreport 以很友好的方式显示 MySQL状态变。事实上,它几乎报告了所有的状态。不像 SHOW STATUS 只是在显示了100多个状态值,mysqlreport 则以人性化的方式阐释和格式化了这些状态值,大大增加了其可读性。可以 点击这里 查看mysqlreport的例子。

mysqlreport 的好处是可以快速的查看各种状态参数组,从而了解服务器的运行状态情况,而无需从 SHOW STATUS 的结果中人工计算。例如索引读取比率是个重要的参数,但是 SHOW STATUS 中并没有显示;它是一个推断值(key_reads 和 key_read_requests 的比值)。

技术相关:

下载服务全新整理

花了一周时间,重新整理了一下下载页面,增加 MySQL 发行版的下载,尤其是 3.23.58 和 4.0.27 这两个目前官网上下载不到的发行版。

由于采用的drupal内置的文件下载服务,链接地址是固定的,担心被某些流氓下载软件盯上,无奈之下只能设置登录本站后才能下载,敬请谅解。

如果对本站的服务还有什么建议,请不吝留言。

个人涂鸦:

页面

Subscribe to iMySQL | 老叶茶馆 - Oracle MySQL ACE Director,专注MySQL RSS