规划WordPress数据库增长的好策略是什么?

时间:2012-05-29 作者:Simon

希望随着WordPress数据库的增长,在优化和保持最佳性能这一主题上得到一些反馈。。。画一幅画。。。。假设您有一个WordPress/Buddypress MU站点,大约从150kb开始(普通安装)。。。随着时间的推移,用户添加博客、论坛、帖子和评论,数据库增长到5mb。。。。接下来的一年是1000亿美元。。。。还假设宿主控件是标准的同址设置,如Cpanel或Plesk。

数据库中的条目数在多大程度上影响前端网站的性能感谢您对保持紧张状态的反馈。

当做

s

3 个回复
最合适的回答,由SO网友:MathSmath 整理而成

Your specific questions:

1) 在性能受到影响之前,DB可能包含的“条目数”没有严格限制。性能取决于您的硬件和配置,也取决于数据库的大小和结构。

2) 如果您担心DB层的可伸缩性,可以在集群中运行,也可以在允许调整大小的云盒或VPS上运行。如果您的数据库开始变得迟钝,您可以调整大小(尽管通常需要额外的费用)。这些选项增加了成本,但实际上是确保DB可扩展性的最佳方法。

3) 这实际上取决于您的主机设置和DB体系结构。但总的来说(除非你使用的是真正便宜的机器),我不会担心30MB的WordPress数据库。WordPress在索引表方面做得很好,即使是OOB MySQL配置也可以轻松地处理这种大小的DB上的WordPress查询。当您达到千兆字节时,您可能需要认真考虑性能优化选项。

In general:

如果您担心性能,请集中精力调整现有的MySQL设置,和/或设置缓存层。缓存可以大大减少MySQL的负担(尤其是WordPress站点,因为它们通常执行大量的DB查询)。

如果在正确调整了MySQL并设置了一个合适的缓存层之后,您仍然担心硬件配置无法满足您的需求,那么您可以制定一个在x时间后删除内容的策略。

这些东西都不是WordPress特有的。我不确定这个问题是否有任何答案不适用于任何运行在LAMP堆栈上的网站或应用程序。但也许其他人对MU表结构或其他特定于WP的DB技巧有建议。。。我不知道。

SO网友:RolandoMySQLDBA

严格地从MySQL的角度来看,我对如何改进MySQL实例的数据/索引缓存提出了一些建议。

请记住,MySQL有两个主要的存储引擎

它们的缓存机制不同。您可以根据自己选择的存储引擎进行调整。

MyISAM仅缓存索引页。它从不缓存数据。可以做两件事来改进MyISAM表的I/O。

MyISAM改进#1

任何具有VARCHAR列的MyISAM表都可以在内部转换为CHAR,而无需接触初始设计。假设您有一个名为mydb的表。如果要改进mytable的I/O,请对其执行以下操作:

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
这将使表的大小增加60%-100%,但在不改变任何其他内容的情况下,I/O性能将提高20-30%。我之前在DBA StackExchange中写到了这一点:

MyISAM改进#2

您需要增加MyISAM密钥缓存(大小为key_buffer_size). 请运行此查询:

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\',\'performance_schema\')) AA ) A,
(SELECT 2 PowerOf1024) B;
这将显示基于当前数据集的理想key\\u buffer\\u大小。

InnoDB缓存数据和索引。如果您将所有数据转换为InnoDB,并且当前正在从所有InnoDB数据库运行WordPress,则需要调整InnoDB缓冲池的大小(大小为innodb_buffer_pool_size). 请运行此查询:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(\' KMG\',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine=\'InnoDB\') A,
(SELECT 2 PowerOf1024) B;
这将显示基于当前数据集的理想key\\u buffer\\u大小。

预测如果您预测数据集将增长20倍,则此查询建议的值将增加20倍。假设您的MyISAM数据集是15MB,3MB是索引的总和。如果您估计将有20倍的数据,请在/etc/my中将key\\u buffer\\u大小设置为60MB。cnf:

[mysqld]
key_buffer_size=60M
然后重新启动MySQL。这同样适用于InnoDB缓冲池。

如果所有数据都是InnoDB,则需要执行full Cleanup of your InnoDB infrastructure which I posted in StackOverflow.

SO网友:shanebp

数据库中的条目数在多大程度上影响前端网站的性能?

当查询开始达到托管帐户的资源限制时。

作为一名网站管理员,您可以做些什么来保持数据库在增长时的平稳运行?

密切关注资源使用情况。采取措施增加资源和/或优化使用。

当您的数据库大小为25-30mb时,您在第5年后的性能方面会有什么期望?

在这么小的数据库上,性能应该没有变化。

如果你希望你的网站增长如此缓慢,那么你有足够的时间来学习如何管理增长。

结束