最小限の期間で、高速で同期的にテーブルに挿入する方法が必要です。私が試したこと(「ブラインド」)は:
私が使用するテストシナリオは、100の接続で構成され、それぞれがINSERTを実行し、0.1秒待ってから、再び無期限に待機します。各「挿入子」は実行時間を記録します。
実行時間を見ると、(例外として)挿入に1.5秒、さらには10秒が表示される場合があります。それ以外の場合、典型的な0.2秒が表示されます。
追加のコンテキスト:
そのようなプロセスのパフォーマンスのさらなる改善点はどこにあるべきですか?
多くの人々がコメントに多くの良い点を追加しました。
1)トランザクションログを別のドライブに分離します。それはラップトップでは難しいでしょう。それができない場合は、ラップトップ用のSSDを手に入れてください。そうすれば、あなたの生活はかなり良くなるはずです。
2)データとログファイルを事前に目標量まで拡張します。 1GBのデータをデータベースに追加する予定がある場合は、開始するためにデータとログファイルを少なくとも1.5GBにしてください。データとログファイルの自動拡張はパフォーマンスに大きな影響を与え、パフォーマンスにこれらの10秒間の「チョーク」が見られる理由となる可能性が非常に高いです。 SQL Management Studioにはいくつかの組み込みレポートがあります(DBを右クリックして[レポート]-> [ディスク使用状況]を選択すると思います)。そこには、すべての自動拡張イベントのテーブルがあります。)
3)クライアントごとに挿入をバッチ処理できる場合は、SqlBulkCopyまたはBULK INSERTステートメントを使用してバッチ処理します。
4)テーブルにクラスター化された主キーを設定してはならない理由はありません。 SQL Serverは、IDENTITY列のクラスター化インデックスをかなりパフォーマンスの高い方法で処理できる必要があります。
私のアドバイスは、ラップトップを降りることです。これを、高速ドライブと大量のRAMを備えた実際のマシンに配置します。