List:General Discussion« Previous MessageNext Message »
From:kernel Date:April 21 2005 8:48pm
Subject:Re: InnoDB Writes blocking Reads
View as plain text  
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

Thread
InnoDB Writes blocking ReadsAndy McCurdy21 Apr
  • Re: InnoDB Writes blocking Readskernel21 Apr
  • Re: InnoDB Writes blocking ReadsAndy McCurdy22 Apr
    • Re: InnoDB Writes blocking Readskernel22 Apr
Re: InnoDB Writes blocking Readskernel22 Apr
Re: InnoDB Writes blocking ReadsHeikki Tuuri24 Apr