はしくれSEめも

SEに必要情報をめも程度に残していこうと思っています。

【SQL Server】おすすめ初期設定

f:id:coogi-se:20210805104840p:plain


SQL Serverのオプションを最適化するための
おすすめ初期設定をまとめました。

照合順序

SQL Server では、文字の大小関係を比較する場合の基準を照合順序 (collation) と呼んでいます。
例えば、「朝」と「海」ではどちらが大きいのか、「あ」「ア」「ア」を大きい順に並べた場合どのように並ぶのかといった、
文字の大小関係を決めているのが照合順序です。

実はSQL Serverのデフォルトだと、アルファベットの大文字と小文字を区別しない設定になっています。
※濁点、半濁点は区別します。

そこで、アルファベットの大文字と小文字を区別するため、以下の設定をおすすめします。

おすすめ:Japanese_CS_AS_KS_WS
※デフォルト値は、Japanese_CI_AS

詳しい照合順序についてはこちら

変更前の注意点

照合順序は、データベースのオプションを変更しても既に作成しているテーブルは、元の照合順序のままです。
※変更後に作成されたテーブルは新しい照合順序で作成されます。

なので、CREATE TABLEを実行するのが早いと思います。

  1. ダミーのテーブルをCREATE TABLE
  2. ダミーテーブルにデータをINSERT SELECTで退避し、一度テーブルをDROP TABLE
  3. その後、CREATE TABLEを実行。
  4. ダミーテーブルのデータをINSERT SELECTで元のテーブルに戻す。
  5. ダミーテーブルをDROP TABLE

な感じで良いと思います。


ロック待ちを解決

SQL Serverのデフォルト設定ではトランザクション分離レベルは、
READ COMMITTEDとなってます。

これだけだと一見問題ないのですが、先のトランザクションの処理が長い場合や、
後のトランザクションがテーブルを参照できずにロック待ちとなってしまいます。 つまり、誰かが登録や更新処理を長い間実行していると、他の人がSELECTした時も
待ちになってしまいます。 SELECTでも待ちになるのは、嫌ですよね。

そこで、以下の設定をおすすめします。

Is Read Committed Snapshot On:True
スナップショット分離を許可:True
※デフォルトは両方とも、False

トランザクション分離レベルの詳細については、以下を参照ください。

関連記事

coogi-memo.hatenablog.com