問題タブ [disk-io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - 1 秒あたりの DISK I/O 書き込みのベンチマーク - ElasticSearch と MySQL
プロジェクトの作業中、システムの監査/証跡ログを記録するために「ElasticSearch」と「MySQL」のどちらを使用するかを決定する必要がありました。ここでは検索速度は問題ではありません。両方のプラットフォームのディスク I/O パフォーマンスを確認する必要がありました。私はディスク I/O 監視の経験がなかったので、少し調査した後、単純な負荷実行スクリプトを使用して、ElasticSearch と MySQL の両方の 1 秒あたりの書き込みを監視することにしました。
ディスク I/O パフォーマンスのために 1 秒あたりの書き込み数を考慮する必要がありますか? 私は正しい方向に進んでいますか?また、少ないかどうかはわかりません。1 秒あたりの書き込み数が良いか悪いか?
php - ttl とディスク i/o を念頭に置いて mongo ドキュメントを作成する最適な方法
ディスク I/O 比率を考慮して、Mongo DB で TTL インデックスを使用するための最良の戦略は何ですか。
序文:
私は、各ノードに約 1 TB のハードディスクがあるクラスター化された mongodb (v2.*) インフラストラクチャで作業しています。そこには、ログ情報が 7 日間保存されます。それ以降は不要になり、削除する必要があります。それぞれ 10 個のコレクションを持つ 6 つのデータベースがあり、コレクションごとに 1,000 万を超えるドキュメントがあります。毎日 100GB の一時データを保存しているとします。
そのため、createdAt フィールドに単純なインデックスを作成しました。
これにより、 に挿入されたタイムスタンプから 7 日後に、このコレクションに挿入されたすべてのドキュメントが削除されcreatedAt
ます。これは私には明らかです。しかし、コレクションに保存されるドキュメントを作成する方法がわかりません。
バックグラウンド インデックスの mongo ドキュメントには次のように記載されています。
質問:
将来の削除についても考えるときに、その TTL インデックスを作成する最良の方法は何ですか。
例: 保存するオブジェクトを作成する方法は 3 つあります。私が使用した構文はphpですが、それは問題ではありません。
オプション1:
ここでは、今日作成されたすべてのドキュメントが、たとえば「2015-04-09 00:00:00」の作成時刻で保存されます。これは、すべてのドキュメントが「2015-04-16 00:00:00」に「期限切れ」になることを意味します。
プロ:
- 毎日、真夜中過ぎにディスク使用量が 100GB 減少するはずです。
- エラーがあるかどうかを簡単に確認できます。ディスク使用率が低下しない場合は、何か問題が発生しています。
短所:
- 100GB のデータを削除すると、巨大なディスク io が発生し、他のプロセスが遅くなる可能性があります。
- 時間と分が欠落しているため、ドキュメントは正確に 7 日未満で保存されます。
オプション 2:
ここで作成されたすべてのドキュメントは、たとえば「2015-04-09 13:23:45」のように異なる作成時刻になります。これは、このサンプル ドキュメントが「2015-04-16 13:23:45」に「期限切れ」になることを意味します。
プロ:
- ドキュメントは正確に 7 日間保存されます。
- ディスク io は 1 日を通してほぼ一定です。他のプロセスに干渉する可能性が低くなります。
短所:
- ドキュメントは 1 日を通して削除されるため、エラーがあるかどうかを確認するのはオプション 1 ほど簡単ではありません。ディスク使用量が大幅に増加することはありません。
(オプション 3):
これはオプション 2 と同じであると思いますが、ここで言及したいと思います。
特定の時間が経過しても有効期限が切れず、特定の日付になるようにインデックスを変更することもできます。
次に、この方法でオブジェクトを作成します。
最良の可能性は何だと思いますか?そのような問題/インフラストラクチャを経験した人はいますか? 経験豊富な mongodb 開発者からのフィードバックをお待ちしています。
c - C ディスク I/O - ファイルの同じオフセットで読み取り後に書き込みを行うと、読み取りスループットが非常に低くなります
バックグラウンド:
データベース関連のプログラムを開発しており、ダーティ メタデータをメモリからディスクに順次フラッシュする必要があります。/dev/sda1 はボリューム形式なので、/dev/sda1 上のデータはブロックごとにアクセスされ、シーケンシャルにアクセスするとブロックは物理的に隣接します。また、ダイレクト I/O を使用しているため、I/O はファイル システムのキャッシュ メカニズムをバイパスし、ディスク上のブロックに直接アクセスします。
問題:
/dev/sda1 を開いた後、1 つのブロックを読み取り、ブロックを更新して、ブロックを /dev/sda1 の先頭からの同じオフセットに繰り返し書き込みます。
コードは以下のようなものです -
pwrite を実行しない場合、読み取りスループットは125 MB/sであることがわかりました。
pwrite を実行すると、読み取りスループットは21 MB/sになり、書き込みスループットは169 MB/sになります。
pwrite の後に read を行うと、書き込みスループットは115 MB/sで、読み取りスループットは208 MB/sです。
read()/write() と aio_read()/aio_write() も試しましたが、問題は残ります。ファイルの同じ位置で読み取り後に書き込みを行うと、読み取りスループットが非常に低くなる理由がわかりません。
このように、一度により多くのブロックにアクセスする場合
問題は軽減されます。チャートを参照してください。
postgresql - Amazon ec2でPostgresの作成/復元に時間がかかる
Ubuntu 12.04 を使用する amazon ec2 インスタンス (SAY S1) (4 コア 7 GB メモリ) があり、postgresql 9.1
. すべての postgres データは、100 GB の別の ssd ボリューム (ルートではない) に保存されます。(現在は 26% のみ使用可能) .
1 日か 2 日から突然、postgres アクションに多くの時間がかかり始めました。コマンドを作成し (52 秒)、データベースを復元します (現在は 9 分、以前は最大 50 秒)。
postgres コマンドの実行中に iostat を実行すると、ec2 ボリュームの IOPS が限界に達していることを確認できます (3 IOPS/GB は、100GB ボリュームの 300 IOPS に相当します)。このコマンドを実行すると、下に表示されますiostat -d 5 -x -p xvdf
。
aws のIO 特性によると、各 IOPS は 256KiB 以下のリクエストを受け取るため、postgres はより小さなデータ ブロックを使用して書き戻すため、より多くの IOPS リクエストが発生しますか?
私は100GBのボリューム(現在95%フル)の別のec2インスタンス(S2と言う)を持っていますが、postgresデータはルートボリュームにあり、そのパフォーマンスは素晴らしいです。したがって、ボリュームのサイズは、ここでは問題ではないと確信しています。
S1 の影響を受けるボリュームには postgres データのみが保存されますが、iostat で以下の統計を確認できます。統計がそのようになっている理由と、ボリュームのサイズを大きくせずに postgres コマンドの時間を短縮するにはどうすればよいかわかりません。(すべての操作中、3GBのメモリは常に空きです)
注 : 影響を受ける postgres のボリュームには、平均サイズが 110 MB/db の 100 の異なる postgres db が含まれています (ただし、正直なところ、これが問題になるとは思いません)。