我一直在阅读DB优化(我是一个分析师,并不是一个系统管理员),这似乎是我们能做的最大的调整就是改变innodb_buffer_pool_size
、innodb_buffer_pool_instances
和innodb_file_per_table
。
是否有一点认为一个非常大的缓冲池不再有意义了。例如,在使用AWS时,如果需要对大约200百万行(索引)的数据进行分析,我可以得到一台具有64核和500 get的机器。是否值得设置innodb_buffer_pool_size = 400G
和innodb_buffer_pool_instances = 60
:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld]
socket = /var/run/mysqld/mysqld.sock
port = 3306
user = mysql
# applies only when running as root
#memlock = 1
table_open_cache = 3072
table_definition_cache = 4096
max_heap_table_size = 64M
tmp_table_size = 64M
max_connections = 505
max_user_connections = 500
max_allowed_packet = 16M
thread_cache_size = 32
query_cache_size = 64M
# InnoDB
default_table_type = InnoDB
# 80% of ram that is dedicated for the database
innodb_buffer_pool_size = 400G
# number of CPU cores dedicated to the MySQL InnoDB backend
innodb_buffer_pool_instances = 60
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_per_table = 1
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
发布于 2018-10-11 20:12:06
除非您在多个写线程之间遇到非常具体的写争用,否则innodb_buffer_pool_instances不会给您带来巨大的优势。我个人从来不需要增加它超过默认的8个实例。
我为MySQL使用了500 GB的服务器,并将大约384 GB用于缓冲池--更多也是有意义的--我优化了巨大的并发性,即使这样,我也考虑将其提高到总可用内存的80%或85% (但希望为文件系统缓存留出足够的空间)。
如果这对您是否有好处,那么它将取决于您的访问模式--如果您正在进行分析查询,您的速度可能是最小的--当然,对于比数据集更大的内存来说,它的回报会减少到根本不具有优势的程度。
很难提供一般性建议,但如果我必须这样做的话: 1)确保您使用的是正确的工具(普通的mysql- InnoDB可能不是一个很好的分析工具--插件或外部工具可能更适合);2)将10%-20%的数据保存在内存中(大多数需要遵循90-10或80-访问频率规则;3)如果只使用InnoDB作为主引擎,则缓冲池占总内存的75%-80%。强调一般的建议,你的需求会有所不同,所以你的配置。看看您的瓶颈是什么,并尝试优化它。
https://dba.stackexchange.com/questions/219853
复制相似问题