2009-03-02 5 views
2

私はオンライン写真コミュニティを運営しています。そのサイトはデータベースアクセス時にクロールを引き出し、時にはタイムアウトに遭うと思われます。SQL Serverのメンテナンスの提案?

私は自分自身がSQLクエリの作成やテーブルの設計にかなり積極的だと考えますが、決してDBAではないので、問題です。

いくつかの背景:

  1. 私のサイトとSQLサーバーがリモートホスト上で実行されています。 Visual StudioとSQL ServerからASP.NETコードをSQL Server Mgmtで更新します。 Studio Express。私はサーバーに物理的にアクセスできません。

  2. すべて私の格納されたprocs(私はそれらを持っていると思う)は、トランザクションでラップされています。

  3. メインテーブルは、現在のところ9400レコードです。このテーブルに夜間に12の新しいレコードを追加します。

  4. このメインテーブルには、複数の他のテーブルのデータを1つのビューにまとめたビューがあります。

  5. セカンダリテーブルは、より小さいレコードですが、それ以上のものです。 1つは70,000、もう1つは115,000です。これらは、#3の項目のコメントと評価の記録です。

  6. インデックスは、最も必要なフィールドです。大きなテーブルの自動再計算統計に設定しました。私は、トランザクションログをクリアし、統計を更新し、メインビューを再構築し、同様のコメントを取得するには、ストアドプロシージャを再構築し、スピードが戻るためのコードを実行した場合、サイトは、停止して磨く

。私はしかし、これを手動で行う必要があります。

悲しいことに、私のユーザーはこれらの問題に不満を持ち、参加は減少します。

私の質問は...遠隔地の環境で、SQLデータベースをピーク時に稼働させ続けるための保守計画を立ててスケジュールする最良の方法は何ですか?

ありがとうございます! KLK

答えて

0

保守タスクを保守計画として設定する必要はありません。

単にあなたが実行したいメンテナンスタスクを実行するストアドプロシージャを作成し、インデックスの再構築、統計の更新など

次に/ sのストアドプロシージャを呼び出してジョブを作成します。ジョブは、希望のスケジュールで実行するように設定できます。

ジョブを作成するには、sp_add_jobプロシージャを使用します。

スケジュールを作成するには、sp_add_scheduleプロシージャを使用します。

私は詳細を明確かつ分かりやすいものにしたいと思いますが、さらに助けが必要な場合は私にラインを落としてください。

乾杯、ジョン

+0

なぜメンテナンスの代わりにストアドプロシージャで行うのですか? –

+0

元のポスターがSQL Server Expressを使用していると仮定します。ただし、SQL Server Mgmt Studio Expressを使用していることを前提としています。 SQL Server Expressは、Integration Servicesもインストールする必要があるため、保守計画をサポートしていません。 –

+0

実際、DBはSQL Server 2005です。Mgmt Studio ExpressはリモートDBに接続するためのツールです。 – klkitchens

2

私の腸は、あなたが何か間違ったことをやっていると言います。

クエリに何か問題があります。あなたが持っている行の数は、ほとんどの場合、パフォーマンスとデータベースとは無関係であることに注意してください。とにかく非常に小さいです。私はあまりSQLサーバーに精通していないが、それはかなり甘いクエリ分析ツールがあると思う。私はそれが遅いクエリをロギングする方法を持っているとも思います。

インデックスが不足しているような気がします。確かに正しいインデックスを追加したと思うかもしれませんが、使用されていることを確認するまでは問題はありません。たぶんあなたはあなたが正しいものを持っていると思うかもしれませんが、あなたの質問はそうでないことを示唆します

まず、クエリを記録する方法を理解します。オッズは非常に優れているので、インデックスが修正するいくつかの順次スキャンを実行しているキラーがあります。

第2に、大量のクエリがあり、代わりにそれを殺している可能性があります。たとえば、user_idからユーザー名を検索するたびに、データベースにヒットする "User"オブジェクトがあるとします。その「キャッシュ」が要求の最後に消去されるプライベート変数であっても、データベースに何百回もクエリを行い、キャッシュで置き換える場所を探します。

ボトムラインは、SQL Serverで誤って設定されていることは間違いありません。つまり、システムが停止したために毎晩サーバーを再起動しなければならない場合は、システムまたはコードを責めますか? SQL Serverで提供されているツールを学ぶなら、かなり滑らかですね:-)

これはすべて間違ったことを受け入れると、プロセスを楽しむということです。私にとって、遅いデータベースクエリを最適化するのは楽しいものではありません。 10秒のランタイムでクエリを実行し、50msのランタイムと1つの適切なインデックスで1つのランタイムに変換できます。

+0

残念ながら、私はこれが当てはまるとは思わない。コードは完全に正常に実行され、その後時間の経過とともに、完全一致コードが遅く実行されます。私はインデックスなどを再構築するような時間まで固定されていません。その後、再び高速で稲妻が実行されます... – klkitchens

+0

時間をかけて資格を与え、数週間話していますか?特定のテーブルインデックスを毎日再インデックスすることは珍しいことではありません。アプリケーションによって生成されるアクティビティーのタイプによって、索引の断片化の速さが決まります。 –

+0

奇妙な。どのような活動がインデックスを再構築する必要がありますか?私はこの種の問題に遭遇することは決してありませんでしたが、私はそれについて聞いたことがあります。テーブルの更新は数多くありますか? –

関連する問題