mysqlサーバーは1秒あたり何回選択できますか?


19

私はビジネスプランを書いています。私のウェブサイトが500.000のユニークビジターからリーチされるときのコストをシミュレートする必要があります。

  • 訪問者:500.000
  • ページビュー:1,500,000
  • クモのページビュー:500,000
  • 総ページビュー:2,000,000

各ページで50件のクエリを実行+-

  • 1日あたりのクエリ:1億
  • 1時間あたり:400万
  • 毎分:70,000
  • 1秒あたり:1,200
  • ピーク:3,000

この計算を行うには、2番目に3,000個のクエリが必要です...どのようなサーバーがそれを処理できますか?

問題は、実際、私のサイトは1日あたり2,000回の訪問を行っており、-+ 150/200クエリ/秒を持っています...この時点から、50,000クエリ/秒を期待しています。

このジョブを管理するクラスターまたはレプリケーションで必要なサーバーの数は?


5
8k +はどのようなサイトに訪問を問い合わせますか?
イグナシオバスケス-エイブラムス

5
すぐにシステム設計のレビューが必要です。
Chopper3

1
本当に重要なこと、つまりクエリ自体については何も言わなかったので、十分な情報はありません。また、実行中のマシンについて説明する必要もありません。これは486ですか?最新かつ最高のスーパーコンピューターか、その間の何か?リストしたこれらの番号はすべて、質問とは無関係です。関連情報を提供してください。
ジョンガーデニア

> 8k +はどのようなサイトに訪問を問い合わせますか?私は2000人のユニークビジターを受け取りますが、各ビジターは多くのページを開きます+私は内部にたくさんのクモを持っています。2000のユニークユーザーが6000のユニークIPを生成しており、毎日120.000ページ以上が開かれています。おかげで

回答:


22

以前は、1日あたり数百万のページヒットがあったWebサイトを持つ電子商取引会社で働いていました。2つのシングルコアCPUと2GBのRAMを備えた単一のDELL PE 1750がありました。4ギガバイト。ピーク時には、このサーバーは1秒あたり最大50k +のクエリを処理しました。

これを言って:データベースはよく構造化され、すべてのクエリは微調整されました(低速のクエリログを分析し、クエリとインデックスを修正する毎週のセッションがありました)。また、サーバーのセットアップも微調整されました。キャッシュは間違いなく良いアイデアですが、MySQLはそれを実行します。パフォーマンスを分析し、メモリの使用方法を微調整するだけです(クエリキャッシュと他のオプション)。

その経験から、最大の影響は、インデックスの欠落、誤ったインデックス、および不適切なデータベース設計(たとえば、主キーとしての長い文字列フィールドおよび同様のナンセンス)が原因であることがわかります。


8

それはすべて、クエリの複雑さ、サーバーのメモリ容量、ディスクの速度に依存します。

クエリが非常に単純な場合、または非常に適切に調整されている場合は、単一の大規模なデータベースサーバーで処理できます。ただし、クエリが非常に複雑な場合(または単純だがチューニングが不十分な場合)、複数のサーバーが必要になります。


またはいくつかの重大なスキーマの変更とインデックスの再作成...-
Massimo

3
ハードウェアを追加するよりも常にチューニングをお勧めします。ハードウェアを追加すると、問題の解決がはるかに困難になるまで、問題がマスクされます。
mrdenny

答えてくれてありがとう、だから私は並列に2台のサーバー+冗長性のために1台のパッシブサーバーで構いませんか?32gのRAMとクイックドライブを備えた2xクアッドコアサーバーについて話しています。私は正しいですか?パフォーマンスが必要なことを覚えておいてください!

1
すべてがうまく調整され、インデックスが作成されています。1週間に1〜2個の低速クエリがあり(低速クエリ時間はわずか2秒です)、とにかくビジネスプランを作成しています。 12,000,000ページは8000のクエリ/秒で毎日発生を開設し管理する

1秒あたり8000件のクエリはそれほど多くありません。おそらく、16コアサーバーが1台で十分でしょう。64ギガバイトのRAM(または、データベースの大きさと、キャッシュに保持する必要があるデータの量に応じて、多かれ少なかれ)トリックを行う必要があります。私のDB(そのSQL Serverを付与)は、16コアの64ギガバイトのRAMサーバーで1 TBであり、40〜50kのユーザーが1日に1分間に数回(各回)ヒットします。
-mrdenny

3

これは、実行している特定のクエリ、データベーススキーム、およびそのサイズについて何も知らない限り、実際には推定できません。

インデックス付きの列での単純なSELECTは、インデックスなしのものに基づいたいくつかのJOINとはまったく異なります。もちろん、関連するテーブルに1Kレコードまたは1Mが含まれる場合、状況は大きく変わります。

また:

  • 現在のハードウェア構成は何ですか?
  • 現在の負荷でサーバーが使用している電力(CPU、RAM、ディスクI / O)はどれくらいですか?

実際には、8 GBのRAMを備えた2xクアッドコアのサーバーがあります。私はフルRAMと100%のプロセッサを使用しています(800%を使用できるようです。こちらを参照してください)。cpuimg834.imageshack.us/img834/3483/downloadv.png ram:img442.imageshack.us/i/ download2p.pngディスク:img213.imageshack.us/i/download1x.png ありがとう

これらのグラフに基づいて、使用しているCPUコアは1つ(または最大2つ)です。したがって、アプリケーションは間違いなくCPUバウンドではありません...またはそうですが、複数のCPUを活用することはできません。また、「キャッシュ」に使用されるすべてのメモリは誰もが実際に必要とするものではなく、「それはそこにある」からOSがそれを利用しているだけです。
マッシモ

すべてのCPUコアの使用に関する情報を見つけるにはどうすればよいですか?私はランプを使用しています

まず、それらを使用していないかどうかを確認する必要があります(=低負荷)、操作を適切に並列化できないため、またはMySQLやApacheが設定されていないためですそれらを使用します。そして、これらの2つのプログラムは通常デフォルトでマルチスレッドであるため、サーバーの負荷とSQLクエリを確認します...-
Massimo

3

Ignacioが述べたように、キャッシングを検討することもできます。cmsまたはおそらくスタックの前に。すべての(すべて!)ページの50以上のクエリは本当にたくさんあります。


はい、これは複雑なウェブサイトです、それはコミュニティです、私は何もキャッシュできません、それは毎秒変化しています。ページをキャッシュしようとしましたが、キャッシュヒット率はほぼ0でした。ページをキャッシュするたびに、ページを再度読み取ることはできないか、ページを再度開く前に変更できるためです。おかげで

4
アクセスできないサイトはほとんどありません。1秒ごとに変更する場合でも、10ページビューのように1秒間キャッシュできます;-)ページ全体をキャッシュするのではなく、ブロックや特定の値などをキャッシュすることを検討しましたか?データベースの外部、共有メモリセグメント、ファイルシステム、memcachedにキャッシュできます。また、一般的にこのような状況でESIは役に立つかもしれない
ヨリス

0

コメントから判断すると、最大の要因はデータセットのサイズ、または少なくとも「ホット」データセットのサイズです。16コアサーバーで3,000qpsまたは8,000qpsであっても、クエリを満たすためにサーバーをディスクに移動する必要がほとんどない限り、まったく問題ありません。アクティブなデータセットがInnoDBがキャッシュに使用しているメモリ量を超えると、パフォーマンスは急速に低下します。


0

大規模な「ホット」データセットの場合、おそらく「ビッグデータ」スキームに変換するのに時間をかける価値があります。たとえば、大量のデータを取得する必要があるが、書き換えはせず、新しいデータのみを追加する場合は、Apache Hiveをご覧ください。ブラウズしてみてください。通常は既存のコードに簡単に接続できるフレーバーであり、キャッシュスペース不足の胸焼けも防ぎます。


0

1秒あたりのクエリに影響を与える可能性があるものが多すぎます。自分でテストせずにデータを信頼しないでください。速度テストの結果をここに投稿して、誰かが現在の(2018-09)mysqlデータベースとマシンでqpsを推定できるようにします。私のテストでは、データサイズはサーバーメモリよりも小さくなっています(IOが大幅に削減され、パフォーマンスが大幅に向上します)。

1つのCPU 3.75GBのメモリ、100GBのssd、gcpクラウドmysqlサーバーインスタンスを使用して、以下を取得します。

  • 1クライアント、1 SQL 1行読み取り:799 sql / second。
  • 50クライアント、1 SQL 1行読み取り:6403 SQL /秒。
  • 50クライアント、1 SQL 1行書き込み:4341行書き込み、qps。4341 sql /秒。
  • 1クライアント、SQLごとに3万行の書き込み:92109書き込み行/秒。

qpsテスト結果(2018-11)を書き込みます毎秒、CPU 97.1%がgcpコンソールでqps 1406 / sを書き込みます。
青銅の男
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.