Ste*_*e06 10 mysql innodb mysql-5 performance mysql-5.5
我在我的工作站上运行 MySQL 5.5 服务器以进行科学数据分析,并想知道如何配置 MySQL 以便在性能方面发挥最大作用。我通常运行的查询类型涉及 10-20 个表的连接,并且可以运行很长时间,一到几分钟也不例外。只有极少数用户同时访问数据库(最多 5 个)。我将服务器从具有 2.2 GHz 双核和 4 GB RAM 的联想 Thinkpad T61 移动到以下带有手工选择组件的全新机器:
第一次测试(在两台机器上运行相同的查询)显示新机器的速度有了明显的提高,但查询仍然需要很多时间,我原以为会有更多的提升。有问题的查询得到了相当好的优化,即所有表都有适当的键,这些键也被用作“解释扩展”。
现在到我当前的 MySQL 设置:首先我应该提到我很久以前从 MyISAM 转移到 Innodb。
我的一些 my.ini 调整(即偏离默认设置):
# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M
general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人会建议更改上述数字或我不知道的其他设置。
我很感激任何有用的评论。
史蒂夫
编辑:我有两个查询涉及跨 10-20 个表的连接,并在我的联想笔记本电脑和新 PC 上运行它们。查询 #1 在新机器上花费了 3m36s,而在笔记本电脑上花费了 9m11s;查询 #2 在工作站上耗时 22.5 秒,而在笔记本电脑上则为 48.5 秒。因此执行速度大约提高了 2-2.5 倍。在工作站上,甚至没有使用 50% 的 RAM。四个内核的平均 CPU 负载(由 Windows 任务管理器报告)仅为 13% 左右。每个核心的负载(由 Core Temp 报告)对于一个核心大约为 25-40%,而对于其他核心<=10%,这表明 MySQL 不会为单个查询使用多个核心.
由于您运行的是 MySQL 5.5,您可能需要考虑配置 InnoDB 以访问多个内核
以下是您应该使用的设置
innodb_thread_concurrency设置 InnoDB 可以保持打开的并发线程数的上限。为此设置的最佳整数是(2 X CPU 数)+ 磁盘数。更新:正如我从 Percona NYC 会议上第一手了解到的那样,您应该将其设置为 0,以便提醒 InnoDB 存储引擎找到适合其运行环境的最佳线程数。
innodb_concurrency_tickets设置可以绕过并发检查而不受惩罚的线程数。达到该限制后,线程并发检查再次成为常态。
innodb_commit_concurrency设置可以提交的并发事务数。由于默认值为 0,因此不设置此项将允许同时提交任意数量的事务。
innodb_thread_sleep_delay设置 InnoDB 线程在重新进入 InnoDB 队列之前可以休眠的毫秒数。默认值为 10000(10 秒)。
innodb_read_io_threads和innodb_write_io_threads(均自 MySQL 5.1.38 起)为读取和写入分配指定数量的线程。默认值为 4,最大值为 64。
innodb_replication_delay在达到 innodb_thread_concurrency 时对从属设备施加线程延迟。
这是我过去关于 MySQL 5.5 和为 InnoDB 激活多个内核的帖子
Jun 01, 2012
:我有 16GB 的内存,我应该如何配置 MySQL 服务器?May 07, 2012
: MySQL 服务器性能Apr 26, 2012
: CPU 性能与数据库服务器有关吗?Mar 16, 2012
:在 Debian 上使用多个内核进行单个 MySQL 查询Oct 07, 2011
:我应该使用 MyISAM 以外的存储引擎来优化这些表还是应该获得更好的磁盘?Sep 20, 2011
:多核和 MySQL 性能Sep 12, 2011
:可以让 MySQL 使用多个核心吗?Percona-领先的 MySQL 顾问提供MySQL 配置向导。my.cnf/my.ini
它允许您根据系统配置进行配置。
另外Percona人出了一本叫做《高性能MySQL》的书。第三版最近发布,其中涵盖了非常详细的调整。
归档时间: |
|
查看次数: |
24994 次 |
最近记录: |