web-dev-qa-db-ja.com

OLTP to OLAPプロセスがデッドロックを引き起こし、顧客に影響を与える

私は.net開発者であり、ビジネスクリティカルになっているためにDBAとパフォーマンスの仕事に没頭しているため、この種の仕事のためのDBAスキルが不足しています。 OLAP + OLTPの基本的な信条のいくつかは、私がよく知らないものであると想定してください。

私の組織では、OLTPデータをconsoで始まる一連のテーブルに「統合」するという概念があります。これは、本質的に非正規化された構造です(OLAPだと思います)。作業を実行するのは非常に遅い、数時間程度です。また、処理時間が急増した顧客を追加するため、拡張性も高くありません。

これらの統合ジョブには、より小さなコンテキストで実行するためのパラメーターもあります。これは、顧客が特定のメトリックのデータを更新したときにトリガーされます。それは一般的にかなり速いです。

残念ながら、夜間の統合ジョブにより、一部の顧客のデッドロックやその他の問題が発生し、プロセスが非常に問題になっています。統合は顧客の1/2で機能し、残りの顧客では機能しなかったため、警鐘が鳴る可能性があります。

この問題を回避するにはどうすればよいですか? OLTP => OLAPトランザクションを実行するためのベストプラクティスはありますか?デッドロックの原因を特定することは私の経験の範囲外であり、統合ジョブを作成しませんでした。私は元の仕事を書いた人を活用しますが、彼らは有能ではないか、そもそもこれは起こらないでしょう(私は推測します)。

1
C Bauer

おそらく、この問題はその間に解決されました。データベースには専用の知識とスキルが必要です。10歳の子供なら誰でもSQLServer Management Studioで遊ぶことができますが、データベースの作成と保守はそれほど簡単ではありません。

SQL Serverの場合、スナップショットアイソレーションレベルが有効になっていることを確認してください。これはデフォルトで無効になっており、データベースはデータロックモードになっています。このモードでは、長時間実行されるクエリが書き込みアクセスや特定の読み取りアクセスをブロックします。スナップショットアイソレーションは、分析/ OLAPのためにSQLServerに導入されたと思います。

また、OLTPテーブルには適切なインデックスが必要です。少なくともこれらすべての基本を知っている人が社内にいる必要があります。

2
Erik Hart