2013-01-07 29 views
4

我需要帮助来调整我的mysql服务器以获得更好的性能。我有很多资源,但仍然表现不佳。我在一张桌子上只有350万条记录,我打的最多。微调MySQL服务器配置以获得更好的性能

我需要帮助,关注哪些设置可以改变以获得更好的性能。

SELECT label, 
COUNT(ObjectKey) AS labelcount 
FROM db.results 
GROUP BY label 
ORDER BY labelcount DESC 
LIMIT 30 

EXPLAINED: 

'1', 'SIMPLE', 'results', 'index', NULL, 'label_index', '258', NULL, '9093098', 'Using index; Using temporary; Using filesort' 

一个简单的查询需要44秒。

这是我的设置。

SHOW VARIABLES LIKE '%buffer%'; 


'bulk_insert_buffer_size', '8388608' 
'innodb_buffer_pool_instances', '1' 
'innodb_buffer_pool_size', '16106127360' 
'innodb_change_buffering', 'all' 
'innodb_log_buffer_size', '10485760' 
'join_buffer_size', '131072' 
'key_buffer_size', '304087040' 
'myisam_sort_buffer_size', '70254592' 
'net_buffer_length', '16384' 
'preload_buffer_size', '32768' 
'read_buffer_size', '65536' 
'read_rnd_buffer_size', '262144' 
'sort_buffer_size', '262144' 
'sql_buffer_result', 'OFF' 


SHOW VARIABLES LIKE 'innodb%' 


innodb_data_home_dir, 
innodb_doublewrite, ON 
innodb_fast_shutdown, 1 
innodb_file_format, Antelope 
innodb_file_format_check, ON 
innodb_file_format_max, Antelope 
innodb_file_per_table, OFF 
innodb_flush_log_at_trx_commit, 0 
innodb_flush_method, 
innodb_force_load_corrupted, OFF 
innodb_force_recovery, 0 
innodb_io_capacity, 200 
innodb_large_prefix, OFF 
innodb_lock_wait_timeout, 50 
innodb_locks_unsafe_for_binlog, OFF 
innodb_log_buffer_size, 10485760 
innodb_log_file_size, 536870912 
innodb_log_files_in_group, 2 
innodb_log_group_home_dir, .\ 
innodb_max_dirty_pages_pct, 75 
innodb_max_purge_lag, 0 
innodb_mirrored_log_groups, 1 
innodb_old_blocks_pct, 37 
innodb_old_blocks_time, 0 
innodb_open_files, 300 
innodb_purge_batch_size, 20 
innodb_purge_threads, 0 
innodb_random_read_ahead, OFF 
innodb_read_ahead_threshold, 56 
innodb_read_io_threads, 4 
innodb_replication_delay, 0 
innodb_rollback_on_timeout, OFF 
innodb_rollback_segments, 128 
innodb_spin_wait_delay, 6 
innodb_stats_method, nulls_equal 
innodb_stats_on_metadata, ON 
innodb_stats_sample_pages, 8 
innodb_strict_mode, OFF 
innodb_support_xa, ON 
innodb_sync_spin_loops, 30 
innodb_table_locks, ON 
innodb_thread_concurrency, 10 
innodb_thread_sleep_delay, 10000 
innodb_use_native_aio, ON 
innodb_use_sys_malloc, ON 
innodb_version, 1.1.8 
innodb_write_io_threads, 4 

这里是我的表解释。

http://pastebin.com/PX6qDHCd

回答

3

,因为这取决于很多因素,你可以使用MySQL Primer和/或MySQL Tuner脚本来查找您的服务器体面的设置。

由于MySQL需要创建一个临时表来执行查询,因此它也可能与可靠的磁盘I/O有关。

+0

我唯一要做的就是在网页上显示数据。如果这是你的服务器。你会做什么改变让你的查询在网页上运行得更快? –

+0

嗯,在过去的两年里,我遇到了几个MySQL性能差的问题,并且非常沮丧,因为无论我如何配置缓存大小等,都没有显着的性能提升,MySQL仅使用可用资源的一小部分。然而,随着磁盘I/O的增加,切换到64位并使用我在我的回答中提到的工具,问题并没有消失,但至少在性能上有了可观的增长。 – Nic

+0

谢谢!你能告诉我mysql如何配置大小吗?是位,字节,兆字节或兆字节? innodb_buffer_pool_size是以位还是字节为单位的? –

相关问题