Bug #74280 | covering secondary scans worse than PK scan at high concurrency | ||
---|---|---|---|
Submitted: | 8 Oct 2014 16:41 | Modified: | 10 Oct 2014 12:01 |
Reporter: | Mark Callaghan | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S5 (Performance) |
Version: | 5.7.5 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[8 Oct 2014 16:41]
Mark Callaghan
[8 Oct 2014 16:43]
Mark Callaghan
create/ddl file for mysqlslap
Attachment: iddl.sql (application/octet-stream, text), 15.46 KiB.
[8 Oct 2014 17:03]
Mark Callaghan
my.cnf for 5.7.5: sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES table-definition-cache=1000 table-open-cache=2000 table-open-cache-instances=8 max_connections=20000 key_buffer_size=200M metadata_locks_hash_instances=256 query_cache_size=0 query_cache_type=0 server_id=9 performance_schema=0 # performance_schema_instrument="wait/synch/%=on" innodb_thread_concurrency=0 # innodb_concurrency_tickets=500 # innodb_adaptive_hash_index=0 binlog_format=row log_bin sync_binlog=0 innodb_buffer_pool_instances=8 innodb_io_capacity=1000 innodb_lru_scan_depth=1000 innodb_checksum_algorithm=CRC32 innodb_buffer_pool_size=2G innodb_log_file_size=1900M innodb_flush_log_at_trx_commit=2 innodb_doublewrite=0 innodb_flush_method=O_DIRECT innodb_max_dirty_pages_pct=80 innodb_file_format=barracuda innodb_file_per_table datadir=/data/orig575/var And for 5.6.21: sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES table-definition-cache=1000 table-open-cache=2000 table-open-cache-instances=8 max_connections=20000 key_buffer_size=200M metadata_locks_hash_instances=256 query_cache_size=0 query_cache_type=0 server_id=9 performance_schema=0 innodb_thread_concurrency=0 # innodb_concurrency_tickets=500 # innodb_adaptive_hash_index=0 binlog_format=row log_bin sync_binlog=0 innodb_buffer_pool_instances=8 innodb_io_capacity=1000 innodb_lru_scan_depth=1000 innodb_checksum_algorithm=CRC32 innodb_buffer_pool_size=2G innodb_log_file_size=1900M innodb_flush_log_at_trx_commit=2 innodb_doublewrite=0 innodb_flush_method=O_DIRECT innodb_max_dirty_pages_pct=80 innodb_file_format=barracuda innodb_file_per_table
[8 Oct 2014 17:04]
Mark Callaghan
related bug - http://bugs.mysql.com/bug.php?id=74283
[10 Oct 2014 12:01]
MySQL Verification Team
Hello Mark, Thank you for the bug report and test case. Confirmed that that a covering secondary index scan is about as fast as a PK scan at low concurrency while it is about 2X slower at high concurrency. Also, mysqlslap with provided test case suggest that 5.7.5 is slower than 5.6.21. I ran mysqlslap like this and stats are in following table: X=1, 2, 4, 8, ..., 32 # PK index scan mysqlslap --concurrency=$X --create-schema=test1 --number-of-queries=100000 --create=iddl.sql --query="select j from foo where i >= 100 order by i limit 1000" # non-covering secondary index scan mysqlslap --concurrency=$X --create-schema=test1 --number-of-queries=100000 --create=iddl.sql --query="select k from foo FORCE INDEX(`xj`) where j >= 100 order by j limit 1000" # covering secondary index scan mysqlslap --concurrency=$X --create-schema=test1 --number-of-queries=100000 --create=iddl.sql --query="select k from foo FORCE INDEX(`xjk`) where j >= 100 order by j limit 1000" ################################### MySQL Version 5.7.5 ################################### -------------------------------------------------------------------------------------------------- Concurrency | PK index scan | non-covering secondary index scan | covering secondary index scan -------------------------------------------------------------------------------------------------- 1 | 53.232 sec | 123.684 sec | 53.791 sec 2 | 28.601 sec | 98.048 sec | 29.018 sec 4 | 14.779 sec | 70.811 sec | 14.669 sec 8 | 7.608 sec | 75.4334 sec | 7.621 sec 16 | 6.017 sec | 97.444 sec | 7.710 sec 32 | 4.503 sec | 104.539 sec | 8.531 sec -------------------------------------------------------------------------------------------------- ################################### MySQL Version 5.6.21 ################################### -------------------------------------------------------------------------------------------------- Concurrency | PK index scan | non-covering secondary index scan | covering secondary index scan -------------------------------------------------------------------------------------------------- 1 | 48.859 sec | 100.413 sec | 49.600 sec 2 | 24.910 sec | 91.999 sec | 27.385 sec 4 | 13.698 sec | 70.666 sec | 14.012 sec 8 | 7.075 sec | 63.059 sec | 7.378 sec 16 | 4.046 sec | sec | 5.759 sec 32 | 3.906 sec | 63.710 sec | 6.899 sec -------------------------------------------------------------------------------------------------- Average number of seconds to run all queries Minimum number of seconds to run all queries Maximum number of seconds to run all queries -------------------------------------------------------------------------------------------------- Thanks, Umesh