查询卡在“连接”命令

所以,小故事。 我们有一个主从设置和每天多次,我们在从数据库上看到类似的东西,试图复制来自主设备的内容

Id User Host db Command Time State Info ------ ----------- ----------------------------------- ------ ------- ------ -------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 system user foodb Connect 59079 Locked UPDATE foo SET bar = 1 WHERE baz = 2; 2 system user (NULL) Connect 62730 Waiting for master to send event (NULL) 940 foouser ip-00-000-000-00.ec2.internal:55555 foodb Sleep 4 (NULL) 941 foouser ip-00-000-000-00.ec2.internal:55555 foodb Sleep 3 (NULL) 

查询(这是一个非常简单,每次手动运行需要<1s)似乎挂在“连接”命令上,并且永远不会进入查询命令。

有谁知道为什么它会挂在这里?

另外值得注意的是,更新查询每天运行超过3000次,大多数情况下,查询运行正常并且不locking。

我知道人们会问索引,但不幸的是它的特权信息,我只能说我很确定它的索引是正确的。 我已经多次查看解释计划和索引。

innodb设置

 "Variable_name" "Value" "innodb_adaptive_hash_index" "ON" "innodb_additional_mem_pool_size" "1048576" "innodb_autoextend_increment" "8" "innodb_autoinc_lock_mode" "1" "innodb_buffer_pool_size" "8388608" "innodb_checksums" "ON" "innodb_commit_concurrency" "0" "innodb_concurrency_tickets" "500" "innodb_data_file_path" "ibdata1:10M:autoextend" "innodb_data_home_dir" "" "innodb_doublewrite" "ON" "innodb_fast_shutdown" "1" "innodb_file_io_threads" "4" "innodb_file_per_table" "OFF" "innodb_flush_log_at_trx_commit" "1" "innodb_flush_method" "" "innodb_force_recovery" "0" "innodb_lock_wait_timeout" "50" "innodb_locks_unsafe_for_binlog" "OFF" "innodb_log_buffer_size" "1048576" "innodb_log_file_size" "5242880" "innodb_log_files_in_group" "2" "innodb_log_group_home_dir" "./" "innodb_max_dirty_pages_pct" "90" "innodb_max_purge_lag" "0" "innodb_mirrored_log_groups" "1" "innodb_open_files" "300" "innodb_rollback_on_timeout" "OFF" "innodb_stats_on_metadata" "ON" "innodb_support_xa" "ON" "innodb_sync_spin_loops" "20" "innodb_table_locks" "ON" "innodb_thread_concurrency" "8" "innodb_thread_sleep_delay" "10000" "innodb_use_legacy_cardinality_algorithm" "ON" 

首先让我们看SHOW PROCESSLIST;

  Id User Host db Command Time State Info ------ ----------- ----------------------------------- ------ ------- ------ -------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 system user foodb Connect 59079 Locked UPDATE foo SET bar = 1 WHERE baz = 2; 2 system user (NULL) Connect 62730 Waiting for master to send event (NULL) 940 foouser ip-00-000-000-00.ec2.internal:55555 foodb Sleep 4 (NULL) 941 foouser ip-00-000-000-00.ec2.internal:55555 foodb Sleep 3 (NULL) 

复制的方式,你会看到属于system user两个线程:I / O线程和SQL线程。 进程ID#1是SQL线程,因为它试图运行SQL语句, dbfoodb

目标表正在使用MyISAM,正如您对该问题的评论中所述。

在什么情况下MyISAM表会被locking? 对MyISAM表的任何INSERT,UPDATE或DELETE都会导致全表locking。

请查找适度写入foo表的任何crontab作业。 另外,检查操作系统,看是否有大量的磁盘交换正在进行。