sql >> データベース >  >> RDS >> Sqlserver

Sql Server 2008 でのデッドロックのトラブルシューティング

    SQL Server 2008 には、デッドロックに関係するプロセスとクエリを特定する複数の方法があります。

      <リ>

      デッドロックが再現しやすい場合は、頻度が高くなり、SQL プロファイラーを使用して SQL サーバーをプロファイリングできます (プロファイラーが有効になっていると、サーバーへのアクセスとパフォーマンスのコストがかかります)。デッドロック グラフを使用する必要があるhttp://sqlmag.com/データベース-パフォーマンス-チューニング/収集-デッドロック-情報-デッドロック-グラフ

      <リ>

      ほとんどの場合、デッドロックの再現は困難です。または、プロファイラーを接続してパフォーマンスに影響を与えたくない本番環境で発生します。

    このクエリを使用して、デッドロックが発生したことを取得します:

    SELECT
      xed.value('@timestamp', 'datetime') as Creation_Date,
      xed.query('.') AS Extend_Event
    FROM
    (
      SELECT CAST([target_data] AS XML) AS Target_Data
      FROM sys.dm_xe_session_targets AS xt
      INNER JOIN sys.dm_xe_sessions AS xs
      ON xs.address = xt.event_session_address
      WHERE xs.name = N'system_health'
      AND xt.target_name = N'ring_buffer'
    ) AS XML_Data
    CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]') AS XEventData(xed)
    ORDER BY Creation_Date DESC
      

    デッドロックを修正するために (NOLOCK) を使用する方向には行きません。それは滑りやすい斜面であり、元の問題を隠しています。



    1. mysql_fetch_arrayは重複データを返します

    2. mysqlデータベースへの重複エントリを回避するための最良の方法

    3. 部分的な単語を使用したMySQL全文検索

    4. Oracleの「CONNECTBYPRIOR」、および「ORDERSIBLINGSBY」に相当するSQLServer