rho*_*rho 4 mysql myisam performance
我需要对 mysql 服务器进行性能调整并需要帮助。
我有一个专用于 MySQL 的 16G 服务器,其中有 1 个 MyISAM 表,其中大约有 200 万行,可以获取大量流量。同一个数据库上还有大约 100 个其他 innodb 表。MyISAM 表几乎是只读的,用户使用它进行搜索。
服务器的 max_connection 值为 800,在大约 300 个并发用户的负载测试下,查询时间开始显着增加。在没有负载的情况下,查询需要大约 500 毫秒才能运行。
目标是显着提高 MyISAM 表上的搜索性能。
表的大小(以 MB 为单位):
data_size index_size total engine
8991 6920 15911 InnoDB
1110 718 1829 MyISAM
Run Code Online (Sandbox Code Playgroud)
以下是我的设置:
connect_timeout 10
innodb_additional_mem_pool_size 24117248
innodb_buffer_pool_size 12G
innodb_commit_concurrency 0
innodb_flush_log_at_trx_commit 1
innodb_log_buffer_size 11534336
innodb_log_file_size 449839104
innodb_open_files 300
innodb_thread_concurrency 8
innodb_thread_sleep_delay 10000
join_buffer_size 131072
key_buffer_size 2147483648
key_cache_age_threshold 300
key_cache_block_size 1024
key_cache_division_limit 100
max_allowed_packet 134217728
max_connections 800
max_delayed_threads 20
max_join_size 18446744073709551615
max_user_connections 0
myisam_max_sort_file_size 107374182400
myisam_mmap_size 18446744073709551615
myisam_sort_buffer_size 70254592
open_files_limit 2048
query_cache_limit 104857600
query_cache_min_res_unit 4096
query_cache_size 419430400
query_cache_type ON
read_buffer_size 262144
socket MySQL
sort_buffer_size 2097152
table_type InnoDB
thread_cache_size 100
thread_handling one-thread-per-connection
thread_stack 262144
tmp_table_size 1073741824
Run Code Online (Sandbox Code Playgroud)
您在问题中明确说明了您的目标
目标是显着提高 MyISAM 表上的搜索性能
好的,让我们调整事物的 MyISAM 方面。
我有四(4)条建议给你
首先,回顾 5 年前,请注意我在对帖子的回答中所说的话InnoDB 和 MyISAM 之间的主要区别是什么?:MyISAM 存储引擎仅缓存来自.MYIMyISAM 表的索引页。
你设置key_buffer_size为2147483648,那2G。然而,您的 MyISAM 索引总共只有 718M。您需要减少key_buffer_size到768M仅释放 1.2G 的 RAM。
许多人没有意识到这一点,但是您可以将一个或多个索引从 MyISAM 表加载到 RAM 中。它被称为专用密钥缓存。3.5 多年前,我在我可以部分使 MySQL 表缓存失效吗?(见建议#1)。它也在 MySQL 文档中:请参阅缓存索引语法
如果 MyISAM 表有很多VARCHAR字段,您可以使用一个 DDL 命令使VARCHAR字段表现得像 aCHAR
ALTER TABLE myisamtable ROW_FORMAT=FIXED;
Run Code Online (Sandbox Code Playgroud)
这将扩展表的方式是 a 的数据类型VARCHAR(32)实际上一直是 32 字节宽,就像 a 一样CHAR(32)。这可能会使 MyISAM 表的大小增加一倍或三倍,但您可以将读取速度提高 20-25%。
我写过很多次了
Mar 25, 2011:MySQL VARCHAR 大小的性能影响Aug 12, 2011:哪个 DBMS 适合超快读取和简单数据结构?Sep 20, 2011:最好的 MyISAM 和 InnoDBMay 02, 2012:选择哪个mysql存储引擎?May 03, 2012: InnoDB 和 MyISAM 哪个更快?如果您这样做,您将需要返回并测量 MyISAM 索引增长了多少。然后,重做SUGGESTION #2并创建新大小的 MyISAM 专用密钥缓存。
尽管 MyISAM 没有 MyISAM 数据的全局缓存,但每个 DB Connection 都有一个本地缓存大小,由read_buffer_size(用于顺序读取)和read_rnd_buffer_size(用于索引读取)决定。
您已将read_buffer_size设置为256K (262144)。您根本没有设置read_rnd_buffer_size,因此它被设置为256K (262144). 您可能想尝试缓存数据,但要非常小心,因为这两个 MyISAM 数据缓存是针对每个数据库连接的。
| 归档时间: |
|
| 查看次数: |
21050 次 |
| 最近记录: |