web-dev-qa-db-ja.com

WordPress DBの成長を計画するための良い戦略は何ですか?

WordPressデータベースが成長してもパフォーマンスを最適化し続けるためのトピックについてのフィードバックをお待ちしています...画像をペイントするには……。 ...時間が経つにつれてユーザーはブログ、フォーラム、投稿、コメントを追加し、データベースは5MBになります。それから来年は10MBになります。

  • データベースのエントリ数は、どの時点でフロントエンドWebサイトのパフォーマンスに影響しますか?
  • データベースが大きくなったときにこれを円滑に実行するために、Webサイト管理者として何をすることができますか?
  • データベースが500〜600メガバイトの大きさになった5年目以降のパフォーマンスに関して、あなたは何を期待できますか?

あなたがタイトな船を維持することについて持っているかもしれないどんなフィードバックでもありがとう。

よろしく、

S.

9
Simon

特定の質問:

1)パフォーマンスが影響を受ける前に、DBに含まれる「エントリの数」に厳密な制限はありません。パフォーマンスは、DBのサイズと構造と同様に、ハードウェアと構成にも依存します。

2)DBレイヤーのスケーラビリティが心配な場合は、クラスターで、またはサイズ変更が可能なクラウドボックスまたはVPSで実行できます。 DBが遅くなり始めた場合は、サイズを増やすことができます(通常は追加費用がかかります)。これらのオプションはコストを追加しますが、実際にはDBのスケーラビリティを確保する最良の方法です。

3)これは、ホスティングのセットアップとDBアーキテクチャに本当に依存します。しかし、一般的には(really安いボックスを使用している場合を除き)、30MBのWordPressデータベースについては心配しません。 WordPressはテーブルのインデックス作成に優れており、OOB MySQL構成でさえ、このサイズのDBでのWordPressクエリを簡単に処理できます。ギガバイトになると、パフォーマンス最適化オプションを真剣に検討する必要が生じる場合があります。

一般的に:

パフォーマンスが心配な場合は、既存のMySQLセットアップの調整やキャッシュレイヤーの設定に集中してください。キャッシングにより、MySQLの負荷を大幅に削減できます(特に、WordPressサイトでは、一般に多数のDBクエリを実行するため)。

MySQLを適切に調整し、適切なキャッシングレイヤーを設定した後、ハードウェア構成の成長を心配しているstillの場合、ポリシーを制定できます。 x時間後にコンテンツを削除します。

これらはいずれもWordPress固有のものではありません。そして、質問にanyLAMPスタックで実行されているWebサイトまたはアプリケーションに当てはまらない答えがあるかどうかはわかりません。しかし、MUテーブル構造またはその他のWP固有のDBトリックに関する提案を他の誰かが持っている可能性があります。

4
MathSmath

MySQLの観点から厳密に、MySQLインスタンスのデータ/インデックスのキャッシュを改善する方法についての提案があります。

MySQLには2つの主要なストレージエンジンがあることを忘れないでください

  • MyISAM
  • InnoDB

それらのキャッシュメカニズムは異なります。選択したストレージエンジンに合わせて調整できることがあります。

MyISAM

MyISAMはインデックスページのみをキャッシュします。データをキャッシュすることはありません。 MyISAMテーブルのI/Oを改善するために2つのことができます。

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_buffer_sizeがわかります。

InnoDB

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_buffer_sizeがわかります。

予測

データセットが20倍になると予測する場合は、このクエリで推奨される値の20倍にしてください。MyISAMデータセットが15MBで、3MBがインデックスの合計であるとします。 20倍のデータ量があると見積もる場合は、/etc/my.cnfでkey_buffer_sizeを60MBに設定します。

[mysqld]
key_buffer_size=60M

それからMySQLを再起動します。同じことがInnoDBバッファープールにも当てはまります。

すべてのデータがInnoDBの場合は、 私がStackOverflowに投稿したInnoDBインフラストラクチャの完全クリーンアップ を実行する必要があります。

4
RolandoMySQLDBA

データベースのエントリ数は、どの時点でフロントエンドWebサイトのパフォーマンスに影響しますか?

クエリがあなたのホスティングアカウントのリソース制限に達し始めたとき。

データベースが大きくなったときにこれを円滑に実行するために、Webサイト管理者として何をすることができますか?

リソース使用量に注目してください。リソースを増やしたり、使用量を最適化したりするための手順を実行します。

データベースが25〜30MBのサイズになる5年目以降のパフォーマンスに関して、何を期待できますか?

その小さなデータベースでもパフォーマンスに変化はないはずです。

あなたのサイトがそれほどゆっくりと成長することを期待しているなら、あなたは成長を管理する方法を学ぶ十分な時間があります。

2
shanebp