Andy McCurdy wrote:
>I've been seeing some weirdness w/ MySQL and InnoDB over the past few days.
>I have a database that's entirely using InnoDB. The database is roughly
>4.5G (one datafile) and contains a little over 50 tables. The web
>applications that hit this database do about 85-90% reads and 10-15% writes.
>Whenever a write comes in, it seems that subsequent reads get blocked to the
>_ENTIRE DATABASE_. What really confuses me is that reads even to other
>tables that aren't any way involved with the table that's being written to
>are waiting until the write completes. I do not use any foreign key
>relationships which could block a parent row.
>
>Whenever I run "show processlist", everything looks fine until a write comes
>in. Reads are answered < 1 sec, and generally don't even appear on the
>processlist. However, as soon as a write hits, all of the reads are in a
>state of "NULL" until the write completes. This problem is compounded when
>several different writes happen from different connections at the same time.
>It leads to the MySQL server blocking long enough that the number of reads
>in the queue exceed the number of max connections. Once the writes happen,
>all of the read queries in the queue get answered and the normal processing
>continues.
>
>I've included two samples from the "show processlist" command. They were
>taken approx. 1 second apart and show the growing amount of reads when
>writes are in the queue. I've removed the User and Host columns as they
>don't seem to be relevant as well as trimmed the state column down. I've
>also included the my.cnf config file and an output of "show status".
>
>Additionally, I'm running Redhat 7.3 - kernel ver. 2.4.20-28.7bigmem #1 SMP
>
>Any help on eliminating this bottleneck would be greatly appreciated!
>Thanks.
>-andy
>
>
>=================================
>process list 1
>=================================
>
>
>+----------+------+-------------+--------+---------+------------------------------------
>| Id | db | Command | Time | State | Info
>+----------+------+-------------+--------+---------+------------------------------------
>| 2972920 | NULL | Binlog Dump | 463909 | Has sen | NULL
>| 2972930 | NULL | Binlog Dump | 463909 | Has sen | NULL
>| 10954259 | NULL | Query | 0 | NULL | show processlist
>| 10962986 | gne | Sleep | 4 | | NULL
>| 10962987 | gne | Sleep | 4 | | NULL
>| 10962997 | gne | Query | 3 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963003 | gne | Query | 2 | NULL | SELECT * FROM clan
>WHERE id='142'
>| 10963018 | gne | Query | 3 | NULL | SELECT * FROM clan
>WHERE id='274'
>| 10963019 | gne | Query | 3 | update | INSERT INTO rating
>(ref_type_id, re
>| 10963020 | gne | Query | 2 | NULL | SELECT * FROM clan
>WHERE id='55'
>| 10963021 | gne | Query | 3 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963022 | gne | Query | 3 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963023 | gne | Query | 3 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963024 | gne | Query | 2 | NULL | SELECT count(*) AS
>count FROM pm_me
>| 10963025 | gne | Query | 2 | NULL | SELECT * FROM contact
>WHERE user_id
>| 10963026 | gne | Query | 2 | NULL | SELECT * FROM clan
>WHERE id='729'
>| 10963027 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963028 | gne | Query | 2 | NULL | select r.review_id from
>review r wh
>| 10963029 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963030 | gne | Query | 2 | update | INSERT INTO pm_message
>SET id=NULL,
>| 10963031 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963032 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963033 | gne | Query | 2 | NULL | select r.review_id from
>review r wh
>| 10963034 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963035 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963036 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963037 | gne | Query | 2 | NULL | SELECT c.* FROM
>clan_pid cp, clan c
>| 10963038 | gne | Query | 2 | NULL | SELECT * FROM
>pm_message WHERE id =
>| 10963039 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963041 | gne | Query | 2 | NULL | SELECT c.* FROM
>clan_pid cp, clan c
>| 10963042 | gne | Query | 1 | NULL | select r.review_id from
>review r wh
>| 10963043 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963045 | gne | Query | 1 | NULL | SELECT count(*) AS
>count FROM pm_me
>| 10963046 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963047 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963048 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963049 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963050 | gne | Query | 1 | NULL | select r.review_id from
>review r wh
>| 10963051 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963052 | gne | Query | 1 | NULL | SELECT * FROM clan
>WHERE id='331'
>| 10963053 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963054 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963055 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963056 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963057 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963058 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963059 | gne | Query | 1 | NULL | SELECT c.* FROM
>clan_pid cp, clan c
>+----------+------+-------------+--------+---------+------------------------------------
>
>
>=================================
>process list 2
>=================================
>
>
>+----------+------+-------------+--------+--------+------------------------------------
>| Id | db | Command | Time | State | Info
>+----------+------+-------------+--------+--------+------------------------------------
>| 2972920 | NULL | Binlog Dump | 463909 | Has sen| NULL
>| 2972930 | NULL | Binlog Dump | 463909 | Has sen| NULL
>| 10954259 | NULL | Query | 0 | NULL | show processlist
>| 10962986 | gne | Sleep | 4 | | NULL
>| 10962987 | gne | Sleep | 4 | | NULL
>| 10962997 | gne | Query | 3 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963003 | gne | Query | 2 | NULL | SELECT * FROM clan WHERE
>id='142'
>| 10963018 | gne | Query | 3 | NULL | SELECT * FROM clan WHERE
>id='274'
>| 10963019 | gne | Query | 3 | update | INSERT INTO rating
>(ref_type_id, re
>| 10963020 | gne | Query | 2 | NULL | SELECT * FROM clan WHERE
>id='55'
>| 10963021 | gne | Query | 3 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963022 | gne | Query | 3 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963023 | gne | Query | 3 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963024 | gne | Query | 2 | NULL | SELECT count(*) AS count
>FROM pm_me
>| 10963025 | gne | Query | 2 | NULL | SELECT * FROM contact
>WHERE user_id
>| 10963026 | gne | Query | 2 | NULL | SELECT * FROM clan WHERE
>id='729'
>| 10963027 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963028 | gne | Query | 2 | NULL | select r.review_id from
>review r wh
>| 10963029 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963030 | gne | Query | 2 | update | INSERT INTO pm_message
>SET id=NULL,
>| 10963031 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963032 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963033 | gne | Query | 2 | NULL | select r.review_id from
>review r wh
>| 10963034 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963035 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963036 | gne | Query | 2 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963037 | gne | Query | 2 | NULL | SELECT c.* FROM clan_pid
>cp, clan c
>| 10963038 | gne | Query | 2 | NULL | SELECT * FROM pm_message
>WHERE id =
>| 10963039 | gne | Query | 2 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963041 | gne | Query | 2 | NULL | SELECT c.* FROM clan_pid
>cp, clan c
>| 10963042 | gne | Query | 1 | NULL | select r.review_id from
>review r wh
>| 10963043 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963045 | gne | Query | 1 | NULL | SELECT count(*) AS count
>FROM pm_me
>| 10963046 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963047 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963048 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963049 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963050 | gne | Query | 1 | NULL | select r.review_id from
>review r wh
>| 10963051 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963052 | gne | Query | 1 | NULL | SELECT * FROM clan WHERE
>id='331'
>| 10963053 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963054 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963055 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963056 | gne | Query | 1 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963057 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963058 | gne | Query | 1 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963059 | gne | Query | 1 | NULL | SELECT c.* FROM clan_pid
>cp, clan c
>| 10963061 | gne | Query | 0 | NULL | SELECT urs_id FROM
>user_info_new WH
>| 10963062 | gne | Query | 0 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963063 | gne | Query | 0 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963064 | gne | Query | 0 | NULL | SELECT c.* FROM clan_pid
>cp, clan c
>| 10963065 | gne | Query | 0 | NULL | SELECT * FROM
>clan_member where uni
>| 10963066 | gne | Query | 0 | NULL | SELECT r.*, ui.username
>FROM review
>| 10963067 | gne | Query | 0 | NULL | SELECT * FROM clan c,
>clan_member c
>| 10963068 | gne | Query | 0 | NULL | SELECT c.* FROM clan_pid
>cp, clan c
>| 10963069 | gne | Query | 0 | NULL | SELECT count(*) AS count
>FROM pm_me
>+----------+------+-------------+--------+--------+------------------------------------
>
>
>
>
>
>======================
>my.cnf
>======================
>[mysqld]
>log-error = /var/opt/mysql/error.log
>log-bin
>server-id = 600
>
>set-variable = slave_net_timeout=3600
>set-variable = net_read_timeout=3600
>set-variable = query_cache_size=512M
>set-variable = wait_timeout=10
>set-variable = key_buffer_size=128M
>set-variable = max_allowed_packet=1024000000
>set-variable = table_cache=512
>set-variable = sort_buffer=2M
>set-variable = record_buffer=4M
>set-variable = thread_cache=8
>set-variable = tmp_table_size=64M
>set-variable = thread_concurrency=4
>set-variable = myisam_sort_buffer_size=256M
>set-variable = max_binlog_size=1024000000
>set-variable = ft_min_word_len=3
>set-variable = ft_stopword_file=''
>set-variable = long_query_time=1
>set-variable = max_connections=400
>set-variable = innodb_buffer_pool_size=512M
>set-variable = max_connect_errors=999999999
>
>
>====================================
>server status values (show status)
>====================================
>+--------------------------+------------+
>| Aborted_clients | 335329 |
>| Aborted_connects | 373166 |
>| Bytes_received | 1943964913 |
>| Bytes_sent | 1037459639 |
>| Com_admin_commands | 61 |
>| Com_alter_table | 1 |
>| Com_analyze | 0 |
>| Com_backup_table | 0 |
>| Com_begin | 0 |
>| Com_change_db | 11518911 |
>| Com_change_master | 0 |
>| Com_check | 0 |
>| Com_commit | 0 |
>| Com_create_db | 0 |
>| Com_create_function | 0 |
>| Com_create_index | 0 |
>| Com_create_table | 8 |
>| Com_delete | 19952 |
>| Com_delete_multi | 0 |
>| Com_drop_db | 0 |
>| Com_drop_function | 0 |
>| Com_drop_index | 0 |
>| Com_drop_table | 2 |
>| Com_flush | 1 |
>| Com_grant | 2 |
>| Com_ha_close | 0 |
>| Com_ha_open | 0 |
>| Com_ha_read | 0 |
>| Com_insert | 237294 |
>| Com_insert_select | 2400 |
>| Com_kill | 758 |
>| Com_load | 0 |
>| Com_load_master_data | 0 |
>| Com_load_master_table | 0 |
>| Com_lock_tables | 0 |
>| Com_optimize | 0 |
>| Com_purge | 0 |
>| Com_rename_table | 0 |
>| Com_repair | 0 |
>| Com_replace | 31107 |
>| Com_replace_select | 0 |
>| Com_reset | 0 |
>| Com_restore_table | 0 |
>| Com_revoke | 0 |
>| Com_rollback | 0 |
>| Com_savepoint | 0 |
>| Com_select | 22301021 |
>| Com_set_option | 49 |
>| Com_show_binlog_events | 0 |
>| Com_show_binlogs | 0 |
>| Com_show_create | 2 |
>| Com_show_databases | 31 |
>| Com_show_fields | 1129 |
>| Com_show_grants | 0 |
>| Com_show_keys | 13 |
>| Com_show_logs | 0 |
>| Com_show_master_status | 0 |
>| Com_show_new_master | 0 |
>| Com_show_open_tables | 0 |
>| Com_show_processlist | 34450 |
>| Com_show_slave_hosts | 6 |
>| Com_show_slave_status | 0 |
>| Com_show_status | 47 |
>| Com_show_innodb_status | 4 |
>| Com_show_tables | 51 |
>| Com_show_variables | 12 |
>| Com_slave_start | 0 |
>| Com_slave_stop | 0 |
>| Com_truncate | 18 |
>| Com_unlock_tables | 0 |
>| Com_update | 253907 |
>| Connections | 11927865 |
>| Created_tmp_disk_tables | 6751 |
>| Created_tmp_tables | 6753 |
>| Created_tmp_files | 358 |
>| Delayed_insert_threads | 0 |
>| Delayed_writes | 0 |
>| Delayed_errors | 0 |
>| Flush_commands | 1 |
>| Handler_commit | 2 |
>| Handler_delete | 17202 |
>| Handler_read_first | 991 |
>| Handler_read_key | 541415295 |
>| Handler_read_next | 340543222 |
>| Handler_read_prev | 0 |
>| Handler_read_rnd | 25605878 |
>| Handler_read_rnd_next | 1794754881 |
>| Handler_rollback | 3868360 |
>| Handler_update | 9501 |
>| Handler_write | 3358752 |
>| Key_blocks_used | 124690 |
>| Key_read_requests | 1091453021 |
>| Key_reads | 174764 |
>| Key_write_requests | 176791 |
>| Key_writes | 166926 |
>| Max_used_connections | 400 |
>| Not_flushed_key_blocks | 0 |
>| Not_flushed_delayed_rows | 0 |
>| Open_tables | 512 |
>| Open_files | 208 |
>| Open_streams | 0 |
>| Opened_tables | 56254 |
>| Questions | 77415469 |
>| Qcache_queries_in_cache | 207102 |
>| Qcache_inserts | 19047398 |
>| Qcache_hits | 31627612 |
>| Qcache_lowmem_prunes | 2766958 |
>| Qcache_not_cached | 3253542 |
>| Qcache_free_memory | 317973448 |
>| Qcache_free_blocks | 94546 |
>| Qcache_total_blocks | 508910 |
>| Rpl_status | NULL |
>| Select_full_join | 0 |
>| Select_full_range_join | 0 |
>| Select_range | 1026865 |
>| Select_range_check | 0 |
>| Select_scan | 11300 |
>| Slave_open_temp_tables | 0 |
>| Slave_running | OFF |
>| Slow_launch_threads | 3 |
>| Slow_queries | 305224 |
>| Sort_merge_passes | 0 |
>| Sort_range | 1291192 |
>| Sort_rows | 26291581 |
>| Sort_scan | 7175 |
>| Table_locks_immediate | 38768307 |
>| Table_locks_waited | 45913 |
>| Threads_cached | 0 |
>| Threads_created | 1190079 |
>| Threads_connected | 53 |
>| Threads_running | 43 |
>| Uptime | 692494 |
>+--------------------------+------------+
>
>
>
>
>
>
>
Andy,
mysql> show innodb status;
output and the mysql version number might help figure this out better.
walt