我正在尝试MySQL的许多问题,内存使用率很高,特别是CPU使用率很高。
我有一个具有以下配置的专用服务器:
8 CPU Intel(R)Xeon(R)CPU E3-1240 v6 @ 3.70GHz
16GB DDR3
使用cPanel / WHM + MySQL的Linux Linux
以下是my.cnf文件:
[mysqld]
max_connections=1000
wait_timeout=1000
interactive_timeout=1000
long_query_time=50
slow_query_log = 0
#slow_query_log_file = /var/log/mysql/slow-query.log
default-storage-engine=MyISAM
log-error=/var/lib/mysql/dc.leilaoweb.com.err
max_allowed_packet=268435456
local-infile=0
event_scheduler = on
tmp_table_size=300M
max_heap_table_size=128M
open_files_limit=65000
performance-schema=1
innodb_file_per_table=1
innodb_log_file_size=512M
innodb_buffer_pool_size=8G
key_buffer_size=512M
innodb_buffer_pool_instances=8
# config cache
query_cache_limit=8M
query_cache_size=256M
query_cache_type=1
table_open_cache=6000
table_cache=5000
thread_cache_size=96
#bind-address=127.0.0.1
#skip-networking
#performance_schema=ON
skip-name-resolve
如何改进此设置以加快查询速度并且不会增加服务器负载?
答案 0 :(得分:0)
这是一个有趣的问题,请求查询优化的帮助,其中没有提到特定的查询。
以下是有关配置选项的一些提示:
default-storage-engine=MyISAM
将默认存储引擎更改为InnoDB,并确保所有现有表都是InnoDB。不要使用MyISAM。
query_cache_size=256M
query_cache_type=1
将查询缓存大小和类型设置为0.查询缓存在极少数条件下非常有用,它已被弃用,并在MySQL 8.0中删除。最好根据具体情况在您的应用程序代码中缓存查询结果。
innodb_buffer_pool_size=8G
如果您有比8G更多的数据,请考虑增加缓冲池的大小。驻留在RAM中的数据和索引越多,性能就越好。但是,一旦您的数据和索引在缓冲池中100%缓存,添加RAM就没有进一步的好处。
当然,不要对缓冲池进行全面定位,以使服务器开始交换。这会破坏性能(否则,如果没有交换,Linux的OOM杀手将终止mysqld。)
key_buffer_size=512M
如果您不使用MyISAM,则无需为密钥缓冲区分配额外的内存。
可能还有其他调整参数可以带来好处,但由于您对查询或服务器活动一无所知,因此无法猜测它们会是什么。
您最好关注索引和查询设计。
通常,优化自然会以牺牲其他查询为代价来改进某些查询。因此,只有在知道需要优化哪些查询后,才能制定优化策略。