我已经看到一些专用的 MySQL 服务器,它们只使用一个内核。我比 MySQL 的 DBA 更擅长开发,所以需要一些帮助
服务器非常庞大,具有 OLAP/DataWarehouse (DW) 类型的负载:
注意:最大的 DB 是从 OLTP DR 服务器复制的 DB,DW 就是从这里加载的。它不是完整的 DW:仅持续 6 个月到 6 周,因此它比 OLTP DB 小。
ALTER TABLE...DROP KEY...ADD INDEX
RAM 的重要性是一个既定的事实,但在 MySQL 使用 CPU 时,关于内核和多线程重要性的资料要少得多。我说的是在 4cores vs 6cores vs 8cores 上运行 MySQL 的区别等等。
不同的存储引擎使用 CPU 的方式不同吗?
这是一个纯理论问题。假设我在多台服务器上部署了一个应用程序。
在前两个部分,我知道要寻找什么。但是数据库服务器呢?我应该寻找什么样的硬件?
PS:假设选择的数据库是 MySQL 或 PostgreSQL。
我正在运行 MySQL 服务器,以在 Debian 作为来宾操作系统的 VM (VMWare) 上进行测试。来宾有四个模拟 CPU 内核,因此我将 thread_concurrency 设置为四个。
我在大型表上执行昂贵的连接,这可能需要几分钟,但我在来宾操作系统上看到,一次只使用一个核心。无论用于所涉及的表的存储引擎如何(使用 MyISAM 和 InnoDB 测试),都会发生这种情况。此外,在执行这些大型查询时,整个数据库似乎都被阻塞了,我无法并行执行任何其他查询。奇怪的是 htop 显示,用于查询的核心在查询运行时发生了变化!
为什么会发生这种情况?
这是来自SHOW FULL PROCESSLIST;
(没有其他查询)的相关条目:
| 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp table |
SELECT DISTINCT * FROM
`pulse_stocks`.`stocks` sto,
`pulse_new`.`security` sec
WHERE
(sto.excntry = sec.excntry AND sto.stock_id = sec.ibtic) OR
( sto.isin = sec.isin AND sto.isin <> "" AND sec.isin <> "" )
ORDER BY
sto.id
LIMIT 0, 30
Run Code Online (Sandbox Code Playgroud)
没有其他待处理的查询。另一个有趣的观察是,如果我省略这 …
我有一些关于从 5.0.88 升级到最新版本的问题。
我正在开发一个生产数据库,它的 4 个最大的表每个包含 400 万到 1000 万行,每个包含大约 15 个字段,并在不同的字段类型(数字、varchar 和文本)上有索引。总index_length
容量为 2.2GB,总容量data_length
为 6GB。所有这些表都使用 MyISAM,它们的读/写比为 66/33。
这是空闲时间 /etc/init.d/mysql status 的输出:
Server version 5.1.37-1ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
...
Threads: 27 Questions: 5430994 Slow queries: 59 Opens: 298 Flush tables: 1 Open tables: 128 Queries per second avg: 182.695
Run Code Online (Sandbox Code Playgroud)
在高峰时段,每秒的查询数约为 300。
在过去的几周里,数据库变得如此缓慢,有时查询会锁定 2 分钟以上。所以,我增加到key_buffer_size
4GB(我机器上有 8GB)。锁定时间减少了。但是在高峰时段还是难以忍受,尤其是读写比接近50/50的时候。
服务器在虚拟环境中运行,因此 I/O 不是很好,并且大多数选择查询ORDER BY <some_indexed_field>
在平均 50k 行的结果集上执行。
之前我已经成功地调整了这个数据库,但现在它仍然较小,但现在我被卡住了。
更新: 白天磁盘利用率很容易达到 100%。
我有一台带有多个 CPU 和 16GB RAM 的专用生产服务器。
如何配置它以利用服务器资源以获得更好的性能?网站流量不断增加,MySQL 开始使用大量 CPU。
这是我当前的MySQL 服务器配置。
我还计划优化数据库,并检查查询以改善缓慢的查询。
我有一个继承的 MySQL 数据库的问题。mysqld 有时会使用高达 2300% 的 CPU。唯一的解决方案是服务 mysql stop 并在表上运行 myisamchk -r。修复索引后,我启动 MySQL,一切正常。
关于永久解决方案的任何想法?
编辑(来自评论):
使用 5.5.29-0ubuntu0.12.04.2-log
key_buffer = 16M max_allowed_packet = 16M 线程堆栈 = 128K 线程缓存大小 = 8 myisam-recover = 备份 最大连接数 = 500 #table_cache = 512 #thread_concurrency = 10 query_cache_limit = 1M query_cache_size = 16M
SELECT SUM(index_length) ndxsize
FROM information_schema.tables
WHERE engine='MyISAM'
Run Code Online (Sandbox Code Playgroud)
返回
+-----------+ | ndxsize | +-----------+ | 59862016 | +-----------+
SELECT SUM(data_length+index_length)/power(1024,2) datndxsize
FROM information_schema.tables
WHERE engine='MyISAM'
Run Code Online (Sandbox Code Playgroud)
返回:
+--------------------+ | 数据大小 | +--------------------+ | 488.69915199279785 | …
mysql ×8
myisam ×3
performance ×3
innodb ×2
concurrency ×1
memory ×1
mysql-5.0 ×1
mysql-5.5 ×1
parallelism ×1
postgresql ×1
tuning ×1
upgrade ×1