2

週末に更新する必要がある SqlServer2000 データベースがあります。

サイズはほぼ10Gです。

更新は、スキーマの変更、主キーの更新から、更新、修正、または挿入された数百万のレコードにまで及びます。

週末は仕事をするのに十分ではありません。

ジョブ専用のサーバーをセットアップし、データベース SINGLE_USER を有効にして、考えられる最適化を行いました: インデックスの削除/再作成、リレーションなど。

プロセスをスピードアップするために何か提案できますか?

SQL SERVER 2000 は否定できません (私の判断ではありません)。更新は、BULK INSERT ではなくカスタムメイドのプログラムを通じて実行されます。

編集:

スキーマの更新は、クエリ アナライザーの TSQL スクリプトによって行われます (バージョンの更新ごとに 1 つのスクリプト)。

データの更新は、C# .net 3.5 アプリによって行われます。

データは(多くの問題を伴う)多数のテキスト ファイルから取得され、ローカル DB に書き込まれます。

コンピュータはどのネットワークにも接続されていません。

4

2 に答える 2

2

余分なインデックスを削除すると役立つ場合がありますが、アップグレード スクリプトが更新する必要のある行を簡単に見つけられるように、それらのインデックスを保持する必要があります。

それ以外の場合は、サーバーに十分なメモリがあることを確認し (SQL Server 2000 Standard は 2 GB に制限されています)、必要に応じて MDF ファイルと LDF ファイルを事前に拡張して、拡張に対応してください。

可能であれば、カスタム プログラムは更新を行ごとではなくセットとして処理する必要があります。

EDIT:理想的には、どの操作がパフォーマンスの低下を引き起こしているかを特定してみてください。スキーマの変更である場合は、列を大きくして多くのページ分割が発生していることが原因である可能性があります。ただし、ページ分割は、同じ理由で挿入および更新時にも発生する可能性があります。行がページに収まらなくなります。

C# アプリケーションがボトルネックである場合、最初に (メンテナンス ウィンドウの前に) ステージング テーブルに変更を実行してから、実際のテーブルに対して 1 回の更新を実行できますか? 100 万行の 1 回の更新は、100 万回の更新呼び出しを行うアプリケーションよりも効率的です。確かに、今週末にこれを行う必要がある場合、これをセットアップする時間があまりないかもしれません。

于 2008-11-27T08:23:02.080 に答える
0

この「オーダーメイド プログラム」とは、具体的にどのようなものなのでしょうか。つまり、どのようにデータと通信していますか? (db サーバーからアプリへの) ネットワーク IO の量を最小限に抑えることは、良い出発点です。通常、これは TSQL で多くの作業を行うことを意味しますが、db サーバーでアプリを実行するだけでも少しは役立つ場合があります。 ..

アプリが大量のデータを再書き込みしている場合でも、一括挿入を使用して新しいテーブル データを送信できる可能性があります。コマンドライン (bcp など) またはコード ( SqlBulkCopy.NET) を介して。これは通常、個々の挿入などよりも高速です。

しかし、それはこの「カスタムメイドプログラム」にかかっています。

于 2008-11-27T08:18:03.540 に答える