ともち屋

リスの写真とか、技術メモとか。

SQLServer勉強会のメモ

某所でSQLServer基礎についての勉強会があったのでメモ。

口頭の説明のメモなので間違ってるかもしれない。
ちげぇ!とかあったらコメント頂ければ幸いです。

導入時のハマりポイント

NetLibが入っていない
・プロトコルが違う(SQL Serverで設定できる。普通はTCP/IP)

SQL ServerをWindows認証(推奨)で使う。

ネットワークにパスワード情報とか流れない。セキュア。
SQL Serverマシンをドメインに参加させること必須
・アクティブディレクトリの知識が必須

メモリ管理

・メモリバッファに読み込んで操作する
・バッファにない場合は追加で読み込んで操作する

パラメータクエリ

・実行計画が使いまわされるので高速
・文字列でクエリを送ると毎回違う実行計画⇒コンパイルなので低速

ローカルのサーバへ接続

  1. .
  2. localhost
  3. (local)

でも繋がる

レポートを使おう

[スキーマ]右クリック⇒[レポート]で色々なレポートを参照できる。

メモリ管理ちょっといい話

SQL Serverのメモリ割り当てを自動にすると、利用可能なメモリを最大限に使う。
他のプロセスがメモリを要求すると、SQL Serverは自分のメモリを解放して渡す。

インスタンス名とポート

デフォルトインスタンスは1433ポート
その他はランダムポートになる。
接続できないーとかの時はポートも疑う。

復旧モデルって?

  1. 単純

デメリット:データベースバックアップのみ。トランザクションログを使って復旧はできない
メリット:定期的にログを消してくれるので容量節約。

  1. 完全

メリット:データベースバックアップ+トランザクションログで復旧できる。
デメリット:トランザクションログを消さないのでどんどん容量を圧迫していく。トランザクションバックアップの手間が必要になる。

データベースサイズの自動拡張

実は拡張する度にデータベースを止めるので、パフォーマンス低下に繋がる。
特に%での拡張はヤバイ。どんどん拡張サイズが増える。サイズ指定拡張おすすめ。
初期サイズ、拡張サイズを考えて物理設計をする必要がある。

完全復旧モデル+%拡張だと自動拡張しまくってガンガンパフォーマンス落ちるから注意。

dboの謎

database owner の略。既定のスキーマ

textデータ型

別テーブルにデータを持たせ、自テーブルはポインタだけを持つ。
nvarchar型の範囲のmaxを4000以上にした場合もtext型と同様になる。
※インデックス貼れない。

楽観的同時実行制御(OCC)

開始時には特に排他処理など行なわず、完了する際に他からの更新がされたか否かを確認し、
もし他から更新されてしまっていたら自らの更新処理を破棄し、エラーとする。
パフォーマンスが良い。

悲観的同時実行制御(PCC)

誰かが更新してるかもしれない
⇒ロックをかけてから更新処理
※ロック失敗したら誰かが更新している。

インデックスチューニングのポイント

  1. 選択数が多い順に結合インデックスを作る。
  2. インデックスを定期的に再構築して最適化する。

長く使うとB木が偏ってくる。

tempDBを高速なディスクに作る

大量ソート時tempdbが使われるので、なるべく早いディスクで作ると
パフォーマンスが良くなる。

UNIONのひみつ

重複を省く⇒結合時に内部的にソートしている
つまりでかいデータセットだとパフォーマンス低下に繋がる。

UNION ALL はソートせず、重複省かないので、パフォーマンスは良い。

パフォーマンスチューニングする際、プロファイラを使って・・・

  1. 実行時間を見る

どこが時間かかってるか?

  1. 実行プランを見る

index使ってるか?

  1. indexを見る

どこにindex貼るか?実際に貼って実行、を繰り返す

パフォーマンスチューニングのポイント

  1. 統計情報を更新しつつ、チューニングする

実行プランが正しいのが出てこない
SQL Serverは自動で更新するようになっている

  1. SQLServerは8Kブロック

ブロックをうまく使えるような行サイズにすると
検索が高速になる。ブロックまたがりは重い。