我正在创建存储在 MySQL 中的大量位板存档。在我的架构中,有四组链接的位板 - 为了查询 - 在四个不同的表中表示。这四组中的每一组都将有大约 100k 行,我预计这些组中大约有 35k。
我的问题是关于 SQL 服务器本身的性能影响和限制。我考虑了以下模型:
附加信息:
所以我主要关心的是 MySQL 对表和数据库计数的限制——鉴于上述信息,是否有任何限制我会超过会取消其中一种模式的资格?
此外,3.5 万个不同的数据库或一个数据库中的 14 万个表是否会产生任何明显的性能问题?
谢谢!
让我们从多个角度来看
如果您只执行 SELECT,则需要运行以下查询:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;
Run Code Online (Sandbox Code Playgroud)
这将为 MyISAM 密钥缓存推荐正确的大小。32 位的最大容量为 4GB。您可以在 64 位机器上走得更高。然而,请根据数据库服务器拥有的 RAM 量使用常识。这应该是您关心的问题,因为仅缓存 .MYI 中的页面。.MYD 中的任何内容都必须从磁盘上一遍又一遍地读取。
如果此查询建议的 RAM 量远远超过安装的 RAM 量几个数量级,则只需将 key_buffer_size 设置为 4G,从这个角度来看就到此为止了。
更改 MyISAM 表以使用 FIXED 行格式可以提高 SELECT 的整体性能。为什么 ?
由于 CHAR 字段由于字段宽度固定而需要较少的字符串操作,因此针对 CHAR 字段的索引查找平均比对应的 VARCHAR 字段快 20%。这不是我的猜测。
《MySQL 数据库设计和调优》一书在 MyISAM 表上执行了一些奇妙的操作来证明这一点。书中的例子做了如下的事情:
ALTER TABLE tblname ROW_FORMAT=FIXED;
Run Code Online (Sandbox Code Playgroud)
该指令强制 VARCHAR 像 CHAR 一样分配固定数量的空间。我在 2007 年的上一份工作中就这样做过,并使用了一个 300GB 的表,并将索引查找速度提高了 20%。
当然,通过将 ROW_FORMAT 更改为 FIXED,在最坏的情况下,MyISAM 表的大小将增加一倍。如果您选择这样做,请确保有足够的磁盘空间。
每当启动 mysqld 时,许多变量都是基于 /etc/my.cnf 设置的。罕见的例外是选项open_files_limit。如果 my.cnf 没有此设置,mysqld 将尝试计算此选项的最佳数字,以便 mysqld 仍然可以运行并将任何文件句柄留给操作系统。
您可以将此数字设置得更高,但风险由您自行承担。
由于您选择的存储引擎是 MyISAM,因此您必须具有快速读取磁盘,因为数据页永远不会被缓存。请使用RAID10组。与其他设置相比,它们更容易进行磁盘维护。您也可以使用 SSD 驱动器。无论您选择什么,都要为磁盘老化和定期磁盘维护做好准备。确保您的 RAID 卡具有最新的固件升级。
您提供的所有信息都必须从这 4 个角度进行审查。您必须取得良好的平衡,并且可能必须根据预算、可用硬件、磁盘空间量以及您没有预料到的 MyISAM 总体限制对您的选择做出让步。
归档时间: |
|
查看次数: |
3884 次 |
最近记录: |