sql >> データベース >  >> RDS >> Mysql

インデックスが原因でINSERT速度を最適化するMySQLの速度が低下している

    高速挿入が必要な場合、最初に必要なのは適切なハードウェアです。これは、十分な量のRAM、機械式ドライブの代わりにSSD、およびかなり強力なCPUを前提としています。

    InnoDBを使用しているので、デフォルトの構成は低速で古いマシン用に設計されているため、最適化する必要があります。

    InnoDBの構成に関する優れた記事です>

    その後、1つのことを知る必要があります。それは、データベースが内部でどのように機能するか、ハードドライブがどのように機能するかなどです。次の説明でメカニズムを簡略化します。

    トランザクションは、ハードドライブがデータを書き込んだことを確認するのを待っているMySQLです。そのため、メカニカルドライブではトランザクションが遅く、1秒あたり200〜400の入出力操作を実行できます。つまり、メカニカルドライブでInnoDBを使用すると、1秒あたり200回の挿入クエリを取得できます。当然、これは簡単な説明です 、何が起こっているのかを概説するために、トランザクションの背後にある完全なメカニズムではありません

    クエリ、特にテーブルのサイズに対応するクエリはバイト数の点で比較的小さいため、1つのクエリで貴重なIOPSを効果的に浪費しています。

    1つのトランザクションで複数のクエリ(100または200以上、正確な数はありません。テストする必要があります)をラップしてからコミットすると、1秒あたりの書き込み数がすぐに増えます。

    Perconaの連中は、比較的安価なハードウェアで1秒あたり15kのインサートを達成しています。 5kの挿入でも1秒は悪くありません。あなたのようなテーブルは小さく、同様のテーブル(3列以上)でテストを行い、240GB SSD(1ドライブ、RAIDなし、テスト目的で使用されます)。

    TL; DR:-上記のリンクをたどり、サーバーを構成し、SSDを取得し、複数の挿入を1つのトランザクションにラップして利益を上げます。また、インデックス作成をオフにしてからオンにしないでください。常に適用できるとは限りません。ある時点で、インデックス作成に処理とIO時間を費やすからです。



    1. MicrosoftAccessでレポートヘッダーにロゴを追加する方法

    2. MySQLでLIMIT1を使用する

    3. mysqlのSETautocommit=1とSTARTTRANSACTIONの違い(何かを逃したことがありますか?)

    4. SQLインジェクションはどのように機能し、どのように保護しますか