アーティクル - CS295675

AddOrUpdateDataTableEntry による DataTable の更新はスレッド セーフではなく、ThingWorx でキーの衝突、DB デッドロック、またはスタック スレッドを引き起こす可能性があります

修正日: 16-Jan-2023   


注記:ここに記載されている情報は、お客様の利便性向上のため機械翻訳ソフトを使用しています。PTCは、ここに記載されている情報の翻訳の正確性について、一切の責任を負いませんので、ご了承ください。英語の原文を参照するには、こちら。この機械翻訳に関する詳細は、こちら。
お知らせいただき、ありがとうございます。この機械翻訳をレビューします。

適用対象

  • ThingWorx Platform 7.4 to 8.4 SP2

説明

  • ThingWorx データ テーブルの更新時にデータベースがデッドロックする
  • データ テーブルの更新時に頻繁に発生するキーの競合
  • ThingWorx サーバーで高 CPU アラートを繰り返し受信する
  • デッドロックに関するデータベース ログのエラー:
2017-09-29 18:00:48 UTC:10.81.0.133(43894): [23973]:詳細: プロセス 23973 は、トランザクション 1014855202 で ShareLock を待機します。プロセス 52285 によってブロックされました。
プロセス 52285 は、データベース 75548 のリレーション 75984 のタプル (739135,1) で ExclusiveLock を待ちます。プロセス 56309 によってブロックされました。
プロセス 56309 は、トランザクション 1014305935 で ShareLock を待機します。プロセス 23973 によってブロックされました。
プロセス 23973: UPDATE data_table SET (entity_id, field_values, entity_key, location, source_id, source_type, tags, time, full_text) = ($1, $2, $3, $4, $5, $6, $7, $8, $9) WHERE entry_id = $10
プロセス 52285: UPDATE data_table SET (entity_id, field_values, entity_key, location, source_id, source_type, tags, time, full_text) = ($1, $2, $3, $4, $5, $6, $7, $8, $9) WHERE entry_id = $10
プロセス 56309: UPDATE data_table SET (entity_id, field_values, entity_key, location, source_id, source_type, tags, time, full_text) = ($1, $2, $3, $4, $5, $6, $7, $8, $9) WHERE entry_id = $10
  • キーの競合に関するデータベース ログのエラー:
2018-06-16 08:25:33 EDT エラー: 重複するキー値が一意の制約「entity_key_constraint」に違反しています
2018-06-16 08:25:33 EDT 詳細: キー (entity_key, entity_id)=(1, DT) は既に存在します。
2018-06-16 08:25:33 EDT ステートメント: data_table に挿入 (entity_id、field_values、entity_key、location、source_id、source_type、tags、time、full_text) 値 ($1、$2、$3、$4、$5、$6、$7) 、$8、$9) を返す entry_id
最新バージョンはこちらを参照ください CS295675