0

私のアプリケーションにはEmployee Swipedaily_Tbl、従業員の毎日のスワイプが挿入される 11 列の SQL Server 2008 テーブルがあります。

私の会社には約8000人の従業員がいます。これは、毎日少なくとも 16000 行が作成されることを意味します。

パフォーマンスを向上させるために、月末にすべての行を削除して別のテーブルに保存する予定です......または、アプリケーション自体から前月のデータをdmbファイルとしてバックアップします

私は SQL Server と DBA を初めて使用するので、より良いアイデアがあるかどうかを提案できますか?

アプリケーションからダンプ ファイルを作成できますか?

4

5 に答える 5

2

パーティショニング テーブルを使用して巨大なボリュームのデータベース テーブルに新しいデータを挿入してもパフォーマンスに影響しないようにするか、スクリプトを使用して SQL ジョブを使用して毎月データをバックアップし、既存のものから削除しますが、ID 列を使用している場合は、スクリプトにいくつかの変更が必要になる場合があります古いデータと新しいデータの競合を避けるため。

于 2013-01-08T11:39:31.040 に答える
1

よくあることですが、状況によって異なります。ネイティブ パーティショニングには SQL Server の Enterprise Edition が必要ですが、これを回避する方法があります (あまりきれいではありませんが)

Enterprise Edition の SQL Server をお持ちの場合は、パーティショニングを真剣に検討します (ここの他の回答のいくつかによくリンクされています)。 、1 日 2 回のスワイプでは、1 か月あたり 50 万行未満であり、1.5 ~ 3 ミルです。行テーブルは、SQL サーバーが処理するほど多くはありません。

この時点でおそらく数か月のデータでパフォーマンスの問題が発生している場合は、テーブルにヒットする最も頻繁なクエリを確認し、それらがインデックスを使用していることを確認しましたか?

于 2013-01-08T16:39:22.800 に答える
1
  1. 同一のテーブルを作成する
  2. 特定の日付 (今日の日付など) より古いすべてのデータをそのテーブルにコピーし、テーブルから削除する SQL スクリプトを作成します。
  3. 毎月 1 日にそのスクリプトを実行するように SQL エージェント ジョブを構成する

ただし、適切なインデックスを作成すれば、元のテーブル自体のデータをより長い期間 (365 日 x 従業員 8,000 人 x スワイプ 2 回 = 584 万レコード) 復元しても問題ありません。SQL サーバーが処理するには多すぎません。

ラージ

于 2013-01-08T11:16:34.973 に答える
1

Swipedaily_Tbl(11 columns)特定のレコードがいつバックアップ テーブルに挿入されたかを示す追加の 1 つの列と同じ別のテーブルを作成できます。その後、1 か月以上前のデータをバックアップし、そのデータを元のテーブルから削除するスクリプトを作成できます。その後、月末に実行するようにスケジュールできるバッチまたはコンソール アプリケーションを作成できます。

この助けを願っています。

ありがとう。

于 2013-01-08T11:20:49.407 に答える
1

「古い」データの要件によって異なります。個人的には、テーブル パーティショニングの使用を強く検討します。参照: http://technet.microsoft.com/en-us/library/dd578580(v=sql.100).aspx

すべての記録をテーブルに保持します。これにより、現在のデータと過去のデータを同時に参照するクエリがよりシンプルになり、コストが削減される可能性があります。

于 2013-01-08T11:21:39.433 に答える