こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

MCSA SQL Server 2016 /70-762/CASCADE, Implicit transaction, Explicit taransaction

2019-12-27 05:16:51 | プログラム 勉強

インフルダウンしてたら、Cascade、やImplicit transaction、Explicit transactionがわからなくなってました。

【Cascade】

FOREIGN KEY (foreign_key_columns)
    REFERENCES parent_table(parent_key_columns)
    ON UPDATE action
    ON DELETE action;
 
--ON DELETE action
  • ON DELETE NO ACTION: SQL Server raises an error and rolls back the delete action on the row in the parent table.(SQL Serverはエラーを発生させ、親テーブルの行の削除アクションをロールバックします。)
  • ON DELETE CASCADE: SQL Server deletes the rows in the child table that is corresponding to the row deleted from the parent table.(SQL Serverは、親テーブルから削除された行に対応する子テーブルの行を削除します。)
  • ON DELETE SET NULL: SQL Server sets the rows in the child table to NULL if the corresponding rows in the parent table are deleted. To execute this action, the foreign key columns must be nullable.(親テーブルの対応する行が削除されると、SQL Serverは子テーブルの行をNULLに設定します。 このアクションを実行するには、外部キー列がNULL可能である必要があります。)
  • ON DELETE SET DEFAULT SQL Server sets the rows in the child table to their default values if the corresponding rows in the parent table are deleted. To execute this action, the foreign key columns must have default definitions. Note that a nullable column has a default value of NULL if no default value specified.(親テーブルの対応する行が削除された場合、SQLServerは子テーブルの行をデフォルト値に設定します。 このアクションを実行するには、外部キー列にデフォルトの定義が必要です。 デフォルト値が指定されていない場合、ヌル可能列のデフォルト値はNULLであることに注意してください。)

 --ON UPDATE action

  • ON UPDATE NO ACTION: SQL Server raises an error and rolls back the update action on the row in the parent table.(SQL Serverはエラーを発生させ、親テーブルの行の更新アクションをロールバックします。)
  • ON UPDATE CASCADE: SQL Server updates the corresponding rows in the child table when the rows in the parent table are updated.(SQL Serverは、親テーブルの行が更新されると、子テーブルの対応する行を更新します。)
  • ON UPDATE SET NULL: SQL Server sets the rows in the child table to NULL when the corresponding row in the parent table is updated. Note that the foreign key columns must be nullable for this action to execute.(SQL Serverは、親テーブルの対応する行が更新されると、子テーブルの行をNULLに設定します。 このアクションを実行するには、外部キー列がNULL可能でなければならないことに注意してください。)
  • ON UPDATE SET DEFAULT: SQL Server sets the default values for the rows in the child table that have the corresponding rows in the parent table updated.(SQL Serverは、更新された親テーブルの対応する行を持つ子テーブルの行にデフォルト値を設定します。)

 

【70-782からの問題】

*毎度グーグル翻訳ですんません。

さて、こんな問題がありました。病み上がりですっかりぱっぱらぱーになってました。

You are developing a new application that uses a stored procedure. The stored procedure inserts thousands of records as a single batch into the Employees table.
Users report that the application response time has worsened since the stored procedure was updated. You examine disk-related performance counters for the
Microsoft SQL Server instance and observe several high values that include a disk performance issue. You examine wait statistics and observe an unusually high
WRITELOG value.

ストアドプロシージャを使用する新しいアプリケーションを開発しています。 ストアドプロシージャは、何千ものレコードを単一のバッチとしてEmployeesテーブルに挿入します。ユーザーは、ストアドプロシージャが更新されてからアプリケーションの応答時間が悪化したと報告しています。 ディスク関連のパフォーマンスカウンターを調べます。Microsoft SQL Serverインスタンス。ディスクパフォーマンスの問題を含むいくつかの高い値を観察します。 待機統計を調べて、異常に高いWRITELOG値。
You need to improve the application response time.
アプリケーションの応答時間を改善する必要があります。

Solution: You update the application to use implicit transactions when connecting to the database.

解決策:データベースに接続するときに暗黙的なトランザクションを使用するようにアプリケーションを更新します。

Does the solution meet the goal?ソリューションは目標を達成していますか?

 

<答え>いいえ

 

では、↓を見てみましょう。


【暗黙的なトランザクション - Implicit transaction】

 In Implicit transaction mode, the instance of the SQL Server Database Engine automatically starts a new transaction after the current transaction is committed or rolled back for each DML statement. We do not need to define the start of a transaction; each statement level transaction will be committed or rolled back automatically. Implicit transaction can be turned on or off per batch basis. We can use the “SET IMPLICIT_TRANSACTIONS ON/OFF” statement to turn implicit transaction mode off. We can use the “COMMIT TRANSACTION” or “ROLLBACK TRANSACTION” statements to end each transaction.

暗黙的トランザクションモードでは、SQL Serverデータベースエンジンのインスタンスは、DMLステートメントごとに現在のトランザクションがコミットまたはロールバックされた後、自動的に新しいトランザクションを開始します。 トランザクションの開始を定義する必要はありません。 各ステートメントレベルのトランザクションは自動的にコミットまたはロールバックされます。 暗黙的なトランザクションは、バッチごとにオンまたはオフにできます。 「SET IMPLICIT_TRANSACTIONS ON / OFF」ステートメントを使用して、暗黙的なトランザクションモードをオフにすることができます。 「COMMIT TRANSACTION」または「ROLLBACK TRANSACTION」ステートメントを使用して、各トランザクションを終了できます。

【明示的なトランザクション - Explicit transaction】

An explicit transaction is one in which we explicitly define both the starting and ending of the transaction. To start an explicit transaction, we can use “BEGIN TRANSACTION” and then complete the transaction by using “COMMIT TRANSACTION” or “ROLLBACK TRANSACTION”.明示的なトランザクションとは、トランザクションの開始と終了の両方を明示的に定義するトランザクションです。 明示的なトランザクションを開始するには、「BEGIN TRANSACTION」を使用してから、「COMMIT TRANSACTION」または「ROLLBACK TRANSACTION」を使用してトランザクションを完了します。

【暗黙的・明示的の違い】

インジケータ

暗黙的なトランザクション

明示的なトランザクション

スコープ

ステートメントレベル

バッチレベル

ログ生成

トランザクションの連続チェーン

1つのトランザクションログエントリ

Log I/O

ステートメントごとに1つのI / Oを取得します

バッチ全体に1つのI / Oが必要です

WRITELOG Waittype

持続期間

N / Aまたは実ディスクの問題がない限り

応答/期間

いくつかのI / Oアクティビティのために長く

高速で少ないI / Oアクティビティ

T-Log Restore

長い、やり直し/元に戻すフェーズ

短いREDO / UNDOフェーズ

T-Logへの影響

非常に高い

少なくて取るに足らない

書き込み時間

長くて遅い

短くて速い

The application which is utilizing the Implicit Transaction mechanism actually makes the I/O system busy and degrades application response time dramatically. As a result, various disk related performance counters show significantly high values and we start believing that the disk is the bottleneck.

Implicit Transactionメカニズムを利用しているアプリケーションは、実際にI / Oシステムをビジーにし、アプリケーションの応答時間を劇的に低下させます。 その結果、さまざまなディスク関連のパフォーマンスカウンターが非常に高い値を示し、ディスクがボトルネックであると考え始めています。

 

 

。。。今思ったけど、こんなに詳しくノートとる必要なかったかもです。あぁ、はやく鼻と咳をとめたい。。。くらくらする。。。


最新の画像もっと見る

コメントを投稿