Art*_*ior 8 mysql innodb myisam locking
我们已经让数据库挂了两次并试图找到原因。
show processlist
Waiting for global read lock | INSERT INTO {myisam_table} ...
Run Code Online (Sandbox Code Playgroud)
在这里,磁盘空间已满,所以我们认为问题在给它一些后就解决了,但第二天中午它又挂了:
show processlist
Waiting for table level lock | UPDATE {myisam_table} ...
Run Code Online (Sandbox Code Playgroud)
是什么原因造成的?
Mysql 默认引擎:InnoDB。
数据库混合了带有 MyISAM 和 InnoDB 引擎的表。
日志贴在这里:
http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/
JOIN
,GROUP BY
或ORDER BY
如果您给我的进程列表用完了磁盘空间,那么我们可以将责任归咎于 MyISAM 存储引擎。为什么?
在您的特定情况下,它不是您的表之一。如果 a JOIN
, GROUP BY
, orORDER BY
正在执行并且临时表正在写入磁盘(在磁盘临时表上使用 MyISAM 存储引擎),MySQL 会在空间不足时冻结。我怎么知道?
第 408,409 页第 29.2 节 Bulletpoint 11 说:
如果在向 MyISAM 表添加行时磁盘空间不足,则不会发生错误。服务器暂停操作,直到空间可用,然后完成操作。
我之前讨论过这种情况
Apr 05, 2013
:“站点离线”MySQL 服务器无法启动和停止Dec 17, 2012
:如何使用 Amazon RDS 解决 MySQL“The table is full”错误 1114?Apr 25, 2012
:非常大的日志文件Mar 15, 2012
:为什么 MySQL 表会崩溃?我该如何预防?有人告诉我你有这两种情况之一
/tmp
位于根分区中,则空间不足[mysqld]
tmpdir = /another/disk/besides/root/partition
Run Code Online (Sandbox Code Playgroud)
运行此代码以安装可在 Linux 重新启动时使用的 RAM 磁盘。
RAMDISK_SIZE=32g
service mysql stop
mkdir /var/tmpfs
echo "none /var/tmpfs tmpfs defaults,size=${RAMDISK_SIZE} 1 2" >> /etc/fstab
mount -t tmpfs -o size=${RAMDISK_SIZE} none /var/tmpfs
cp -R /var/lib/mysql/* /var/tmpfs
mv /var/lib/mysql /var/lib/mysql_old
ln -s /var/tmpfs /var/lib/mysql
chown -R mysql:mysql /var/tmpfs
chown -R mysql:mysql /var/lib/mysql
service mysql start
Run Code Online (Sandbox Code Playgroud)
然后,将tmpdir映射到/var/tmpfs
归档时间: |
|
查看次数: |
65391 次 |
最近记录: |