Hi all,
I am having issues with the following query, Its very slow (about 3 minutes to complete for just 2 days).
Could somebody point where is the problem and how I can re-write the query so its much faster?
I can’t see why its going so slow!!
Note: All the tables queried have the same format, as all of them are statistics from different clusters for the same application.
The server is a large server: Solaris 10, 8 AMD dual core CPU and 32 GB RAM. Two raid SCSI disks. But during the query I can see just 5% CPU usage!!
explain extended
SELECT
UPPER(CAST(date_format(cluster2-transactions_per_second
.Da te_Time, ‘%Y-%m-%d %H:%i’) as datetime)) as “Date_Time”,
SUM(DISTINCT (cluster2-transactions_per_second
.mail_transactions
)) AS cluster2_mo_attempts,
SUM(DISTINCT (cluster3-transactions_per_second
.mail_transactions
)) AS cluster3_mo_attempts,
SUM(DISTINCT (cluster4-transactions_per_second
.mail_transactions
)) AS cluster4_mo_attempts,
SUM(DISTINCT (cluster5-transactions_per_second
.mail_transactions
)) AS cluster5_mo_attempts,
SUM(DISTINCT (cluster6-transactions_per_second
.mail_transactions
)) AS cluster6_mo_attempts,
SUM(DISTINCT (cluster7-transactions_per_second
.mail_transactions
)) AS cluster7_mo_attempts
FROM
cluster2-transactions_per_second
force index (date_index),
cluster3-transactions_per_second
force index (date_index),
cluster4-transactions_per_second
force index (date_index),
cluster5-transactions_per_second
force index (date_index),
cluster6-transactions_per_second
force index (date_index),
cluster7-transactions_per_second
force index (date_index)
WHERE
cluster2-transactions_per_second
.Date_Time=cluster3-trans actions_per_second
.Date_Time AND
cluster2-transactions_per_second
.Date_Time=cluster4-trans actions_per_second
.Date_Time AND
cluster2-transactions_per_second
.Date_Time=cluster5-trans actions_per_second
.Date_Time AND
cluster2-transactions_per_second
.Date_Time=cluster6-trans actions_per_second
.Date_Time AND
cluster2-transactions_per_second
.Date_Time=cluster7-trans actions_per_second
.Date_Time AND
cluster2-transactions_per_second
.Date_Time < ‘2008-10-01 23:55’ AND
cluster2-transactions_per_second
.Date_Time > ‘2008-03-19 23:55’
group by cluster2-transactions_per_second
.Date_Time order by cluster2-transactions_per_second
.Date_Time
\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: cluster2-transactions_per_second
type: range
possible_keys: date_index
key: date_index
key_len: 22
ref: NULL
rows: 1993
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: cluster3-transactions_per_second
type: ref
possible_keys: date_index
key: date_index
key_len: 22
ref: load_test_db.cluster2-transactions_per_second.Date_Time
rows: 19
Extra:
*************************** 3. row ***************************
id: 1
select_type: SIMPLE
table: cluster4-transactions_per_second
type: ref
possible_keys: date_index
key: date_index
key_len: 22
ref: load_test_db.cluster2-transactions_per_second.Date_Time
rows: 19
Extra:
*************************** 4. row ***************************
id: 1
select_type: SIMPLE
table: cluster5-transactions_per_second
type: ref
possible_keys: date_index
key: date_index
key_len: 22
ref: load_test_db.cluster4-transactions_per_second.Date_Time
rows: 19
Extra: Using where
*************************** 5. row ***************************
id: 1
select_type: SIMPLE
table: cluster6-transactions_per_second
type: ref
possible_keys: date_index
key: date_index
key_len: 22
ref: load_test_db.cluster5-transactions_per_second.Date_Time
rows: 19
Extra: Using where
*************************** 6. row ***************************
id: 1
select_type: SIMPLE
table: cluster7-transactions_per_second
type: ref
possible_keys: date_index
key: date_index
key_len: 22
ref: load_test_db.cluster2-transactions_per_second.Date_Time
rows: 19
Extra:
6 rows in set, 1 warning (0.00 sec)
mysql> describe cluster2-transactions_per_second
;
±------------------±-------------±-----±----±---------- ----------±------+
| Field | Type | Null | Key | Default | Extra |
±------------------±-------------±-----±----±---------- ----------±------+
| Date_Time | varchar(20) | NO | MUL | 0000-00-00 00:00:00 | |
| HostName | varchar(255) | NO | MUL | | |
| mail_transactions | double | YES | | NULL | |
| CPU_usage | double | YES | | NULL | |
±------------------±-------------±-----±----±---------- ----------±------+
4 rows in set (0.00 sec)
mysql> describe cluster3-transactions_per_second
;
±------------------±-------------±-----±----±---------- ----------±------+
| Field | Type | Null | Key | Default | Extra |
±------------------±-------------±-----±----±---------- ----------±------+
| Date_Time | varchar(20) | NO | MUL | 0000-00-00 00:00:00 | |
| HostName | varchar(255) | NO | MUL | | |
| mail_transactions | double | YES | | NULL | |
| CPU_usage | double | YES | | NULL | |
±------------------±-------------±-----±----±---------- ----------±------+
4 rows in set (0.00 sec)
mysql> describe cluster4-transactions_per_second
;
±------------------±-------------±-----±----±---------- ----------±------+
| Field | Type | Null | Key | Default | Extra |
±------------------±-------------±-----±----±---------- ----------±------+
| Date_Time | varchar(20) | NO | MUL | 0000-00-00 00:00:00 | |
| HostName | varchar(255) | NO | MUL | | |
| mail_transactions | double | YES | | NULL | |
| CPU_usage | double | YES | | NULL | |
±------------------±-------------±-----±----±---------- ----------±------+
4 rows in set (0.00 sec)
mysql> describe cluster5-transactions_per_second
;
±------------------±-------------±-----±----±---------- ----------±------+
| Field | Type | Null | Key | Default | Extra |
±------------------±-------------±-----±----±---------- ----------±------+
| Date_Time | varchar(20) | NO | MUL | 0000-00-00 00:00:00 | |
| HostName | varchar(255) | NO | MUL | | |
| mail_transactions | double | YES | | NULL | |
| CPU_usage | double | YES | | NULL | |
±------------------±-------------±-----±----±---------- ----------±------+
4 rows in set (0.00 sec)
mysql> describe cluster6-transactions_per_second
;
±------------------±-------------±-----±----±---------- ----------±------+
| Field | Type | Null | Key | Default | Extra |
±------------------±-------------±-----±----±---------- ----------±------+
| Date_Time | varchar(20) | NO | MUL | 0000-00-00 00:00:00 | |
| HostName | varchar(255) | NO | MUL | | |
| mail_transactions | double | YES | | NULL | |
| CPU_usage | double | YES | | NULL | |
±------------------±-------------±-----±----±---------- ----------±------+
4 rows in set (0.00 sec)
mysql> describe cluster7-transactions_per_second
;
±------------------±-------------±-----±----±---------- ----------±------+
| Field | Type | Null | Key | Default | Extra |
±------------------±-------------±-----±----±---------- ----------±------+
| Date_Time | varchar(20) | NO | MUL | 0000-00-00 00:00:00 | |
| HostName | varchar(255) | NO | MUL | | |
| mail_transactions | double | YES | | NULL | |
| CPU_usage | double | YES | | NULL | |
±------------------±-------------±-----±----±---------- ----------±------+
4 rows in set (0.00 sec)
mysql> select count() from cluster2-transactions_per_second
;
±---------+
| count() |
±---------+
| 183382 |
±---------+
mysql> select count() from cluster3-transactions_per_second
;
±---------+
| count() |
±---------+
| 183382 |
±---------+
mysql> show create table cluster2-transactions_per_second
;
±----------------------------------------------------±---- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ----------------------------------------------------------+
| Table | Create Table |
±----------------------------------------------------±---- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ----------------------------------------------------------+
| cluster2-transactions_per_second | CREATE TABLE cluster2-transactions_per_second
(
Date_Time
varchar(20) NOT NULL default ‘0000-00-00 00:00:00’,
HostName
varchar(255) NOT NULL default ‘’,
mail_transactions
double default NULL,
CPU_usage
double default NULL,
KEY date_index
(Date_Time
),
KEY hostname_index
(HostName
)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
±----------------------------------------------------±---- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ----------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show variables;
±--------------------------------±------------------------ ---------------+
| Variable_name | Value |
±--------------------------------±------------------------ ---------------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| automatic_sp_privileges | ON |
| back_log | 50 |
| basedir | /opt/mysql/mysql/ |
| binlog_cache_size | 2097152 |
| bulk_insert_buffer_size | 134217728 |
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /opt/mysql/mysql/share/mysql/charsets/ |
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 30 |
| datadir | /var/lib/mysql/ |
| date_format | %Y-%m-%d |
| datetime_format | %Y-%m-%d %H:%i:%s |
| default_week_format | 0 |
| delay_key_write | ON |
| delayed_insert_limit | 100 |
| delayed_insert_timeout | 300 |
| delayed_queue_size | 1000 |
| div_precision_increment | 4 |
| keep_files_on_create | OFF |
| engine_condition_pushdown | OFF |
| expire_logs_days | 0 |
| flush | OFF |
| flush_time | 0 |
| ft_boolean_syntax | + -><()~*:“”&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
| group_concat_max_len | 1024 |
| have_archive | YES |
| have_bdb | NO |
| have_blackhole_engine | YES |
| have_compress | YES |
| have_crypt | YES |
| have_csv | YES |
| have_dynamic_loading | YES |
| have_example_engine | YES |
| have_federated_engine | YES |
| have_geometry | YES |
| have_innodb | DISABLED |
| have_isam | NO |
| have_merge_engine | YES |
| have_ndbcluster | NO |
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| have_query_cache | YES |
| have_raid | NO |
| have_rtree_keys | YES |
| have_symlink | YES |
| hostname | mdbserver |
| init_connect | |
| init_file | |
| init_slave | |
| innodb_additional_mem_pool_size | 16777216 |
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_awe_mem_mb | 0 |
| innodb_buffer_pool_size | 2147483648 |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:200M:autoextend |
| innodb_data_home_dir | |
| innodb_adaptive_hash_index | ON |
| 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 | 120 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_arch_dir | |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 8388608 |
| innodb_log_file_size | 268435456 |
| innodb_log_files_in_group | 3 |
| 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_support_xa | ON |
| innodb_sync_spin_loops | 20 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 16 |
| innodb_thread_sleep_delay | 10000 |
| interactive_timeout | 28800 |
| join_buffer_size | 1048571904 |
| key_buffer_size | 314572800 |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| language | /opt/mysql/mysql/share/mysql/english/ |
| large_files_support | ON |
| large_page_size | 0 |
| large_pages | OFF |
| lc_time_names | en_US |
| license | GPL |
| local_infile | ON |
| locked_in_memory | OFF |
| log | OFF |
| log_bin | ON |
| log_bin_trust_function_creators | OFF |
| log_error | |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_queries | ON |
| log_warnings | 2 |
| long_query_time | 2 |
| low_priority_updates | OFF |
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
| max_allowed_packet | 67107840 |
| max_binlog_cache_size | 4294967295 |
| max_binlog_size | 1073741824 |
| max_connect_errors | 100000000 |
| max_connections | 2000 |
| max_delayed_threads | 20 |
| max_error_count | 64 |
| max_heap_table_size | 314572800 |
| max_insert_delayed_threads | 20 |
| max_join_size | 18446744073709551615 |
| max_length_for_sort_data | 1024 |
| max_prepared_stmt_count | 16382 |
| max_relay_log_size | 0 |
| max_seeks_for_key | 4294967295 |
| max_sort_length | 1024 |
| max_sp_recursion_depth | 0 |
| max_tmp_tables | 32 |
| max_user_connections | 0 |
| max_write_lock_count | 4294967295 |
| multi_range_count | 256 |
| myisam_data_pointer_size | 6 |
| myisam_max_sort_file_size | 10737418240 |
| myisam_recover_options | DEFAULT |
| myisam_repair_threads | 1 |
| myisam_sort_buffer_size | 104857600 |
| myisam_stats_method | nulls_unequal |
| net_buffer_length | 16384 |
| net_read_timeout | 30 |
| net_retry_count | 10 |
| net_write_timeout | 60 |
| new | OFF |
| old_passwords | OFF |
| open_files_limit | 26106 |
| optimizer_prune_level | 1 |
| optimizer_search_depth | 62 |
| pid_file | /var/lib/mysql/mdbserver.pid |
| port | 3306 |
| preload_buffer_size | 32768 |
| protocol_version | 10 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 2097152 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 134217728 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
| range_alloc_block_size | 2048 |
| read_buffer_size | 524283904 |
| read_only | OFF |
| read_rnd_buffer_size | 209711104 |
| relay_log | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_purge | ON |
| relay_log_space_limit | 0 |
| rpl_recovery_rank | 0 |
| secure_auth | OFF |
| secure_file_priv | |
| server_id | 1 |
| skip_external_locking | ON |
| skip_networking | OFF |
| skip_show_database | OFF |
| slave_compressed_protocol | OFF |
| slave_load_tmpdir | /tmp/ |
| slave_net_timeout | 3600 |
| slave_skip_errors | OFF |
| slave_transaction_retries | 10 |
| slow_launch_time | 2 |
| socket | /tmp/mysql.sock |
| sort_buffer_size | 629145592 |
| sql_big_selects | ON |
| sql_mode | |
| sql_notes | ON |
| sql_warnings | OFF |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
| storage_engine | MyISAM |
| sync_binlog | 0 |
| sync_frm | ON |
| system_time_zone | GMT |
| table_cache | 12048 |
| table_lock_wait_timeout | 50 |
| table_type | MyISAM |
| thread_cache_size | 8 |
| thread_concurrency | 16 |
| thread_stack | 196608 |
| time_format | %H:%i:%s |
| time_zone | SYSTEM |
| timed_mutexes | OFF |
| tmp_table_size | 1048576000 |
| tmpdir | /tmp |
| transaction_alloc_block_size | 8192 |
| transaction_prealloc_size | 4096 |
| tx_isolation | REPEATABLE-READ |
| updatable_views_with_limit | YES |
| version | 5.0.52-enterprise-gpl-log |
| version_comment | MySQL Enterprise Server (GPL) |
| version_compile_machine | i386 |
| version_compile_os | pc-solaris2.10 |
| wait_timeout | 28800 |
±--------------------------------±------------------------ ---------------+