show processlist 看到大量的 Waiting for table level lock
video_file set dmd5='3b6950150e45488268431b612c81eb1e', filesize=2790658, totaltime=261625, v | 0 | 0 | 1 |
| 2090679959 | 58bb520 | 10.11.80.84:16894 | 56_flash_flv | Query | 1047 | Waiting for table level lock | update video_file set dmd5='8242e23856e6fe9457a41f26076d1cec', filesize=7871452, totaltime=304600, v | 0 | 0 | 1 |
| 2090679973 | 58bb520 | 10.11.80.82:29175 | 56_flash_flv | Query | 1012 | Waiting for table level lock | update video_file set dmd5='aa859956958e7aa4c86bd3b0b3b3133b', filesize=10095169, totaltime=286000, | 0 | 0 | 1 |
| 2090679997 | 58bb520 | 10.11.80.117:37906 | 56_flash_flv | Query | 1023 | Waiting for table level lock | update video_file set dmd5='5152806cba75a0c659ccb684ae88f3d6', filesize=7750179, totaltime=107880, v | 0 | 0 | 1 |
| 2090680656 | c26140 | 10.11.80.117:38628 | 56_flash_flv | Query | 1098 | Writing to net | SELECT /*!40001 SQL_NO_CACHE */ * FROM `flash_flv_date` | 13222420 | 0 | 13222420 |
| 2090680664 | 58bb520 | 10.11.80.117:38634 | 56_flash_flv | Query | 1098 | Waiting for table level lock | insert into `flash_flv_date` set
表是 innodb 的表,这个可以肯定,如果是对表进行修改操作,会出现 metadata 的锁表等待,但是和平常看到的不太一样。
从 processlist 输出注意到 sql 中的注释 /*!40001 SQL_NO_CACHE */ 来看,是在导数据,并且它的执行时间最长,导致大量更新表操作失败。
innodb 是支持事物型的,直接锁住整个表的情况不合理,另外即便是锁表的话,最常见的也是这种:
Waiting for table metadata lock
为了验证来源,进行测试,在 mysqldump 的时候增加 --lock-all-tables 发现看到的信息是这样的,和实际的情况有些不一致
Waiting for global read lock
通过 grep mysqldump 的 help 输出,使用 --add-locks 参数验证,在 state 列的输出重看到 table level lock 的提示:
Waiting for table level lock
没有评论:
发表评论