mysql 插入无法提交

来源:互联网 发布:mac 视频剪辑 水平调整 编辑:程序博客网 时间:2024/06/06 07:17

遇到表在插入提交时遇到阻塞的问题,表比较小:62条记录。

但是通过执行:analyze table ****,就能解决这个问题。这个也是凭借经验得出的,当然是解决索引失效的问题。

如果开启了binlog,那么Analyze Table的结果也会写入binlog,我们可以在analyze和table之间添加关键字local取消写入。

其他原因猜测:可变长度表,大量的插入删除,数据文件碎片太多,导致异常
结论:可变长度,存在大量插入删除修改操作的表,别忘了时常optimize一下,也可酌情考虑改成定长的(ps:对于utf8来说,为了保证定长,char(1)即使是插入1个数字,也是3字节)

附:

mysql> show status like '%key_write%';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| Key_write_requests | 2618845 |
| Key_writes         | 20      |
+--------------------+---------+
Key_write_requests 请求将一个关键字块写入缓存次数。
Key_writes 将一个键值块物理写入磁盘的次数。


附2:

2.1 optimize

optimize 优化存储并提高访问IO,即 可以回收空间、减少碎片、提高I/O

目前支持的存储引擎有:InnoDB、MyASIM和ARCHIVE
如果是Replication环境、可加NO_WRITE_TO_BINLOG(或者LOCAL、意思完全相同)、比如:optimize local table table_name;

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

OPTIMIZE TABLE语句被写入到二进制日志中,除非使用了自选的NO_WRITE_TO_BINLOG关键词(或其别名LOCAL)。已经这么做了,因此,用于MySQL服务器的OPTIMIZE TABLE命令的作用相当于一个复制主服务器,在默认情况下,这些命令将被复制到复制从属服务器中。


例如测试:

[mysql@odd employees]$ ls -alh t.ibd  
-rw-rw---- 1 mysql dba 24M 05-22 16:48 t.ibd  
未optimize前、有24M

mysql> optimize table t;  
+-------------+----------+----------+-------------------------------------------------------------------+  
| Table       | Op       | Msg_type | Msg_text                                                          |  
+-------------+----------+----------+-------------------------------------------------------------------+  
| employees.t | optimize | note     | Table does not support optimize, doing recreate + analyze instead |  
| employees.t | optimize | status   | OK                                                                |  
+-------------+----------+----------+-------------------------------------------------------------------+  
2 rows in set (3.82 sec)  
--对于InnoDB的表、上面的内容并非报错、这是MySQL会帮你映射到:alter table table_name engine='InnoDB';  
--MyISAM不会有这种情况 
 
[mysql@odd employees]$ ls -alh t.ibd  
-rw-rw---- 1 mysql dba 14M 05-22 16:49 t.ibd  
optimize后、剩14M 

2.2 check
检查表或视图的有无错误
支持表引擎有:InnoDB和MyISAM

2.3analyze
用于收集优化器统计信息、和tuning相关
支持表引擎有:MyISAM、BDB、InnoDB
如果不想记录到binlog、也可加关键字local或者另外一个


0 0
原创粉丝点击