「絵で見てわかるSQL Serverの仕組み」について

「絵で見てわかるSQL Serverの仕組み」が結構個人的に有益だったので、復習がてら紹介とエッセンスの紹介を行っていきたいと思います。
極めて独断と偏見です。

対象者としては
・データベースも知ったばかりの方
・SQLを学習しようと思っている方

このあたりのどちらかの方が読むものと考えています。
なお、この書籍は**やや手間暇はかかる書籍**です。難しいかもしれませんが、脇を一緒に埋めていけば初学者でも内容と単語をさっくり頭に入れるぐらいは出来るはずです（少なくとも私はある程度は読めました）。

<h1>この記事は何をしてる？　何が分かる？</h1>

・得られる情報と得られない情報の明記
・この書籍で期待できる学習成果の明示（つまりどこの解像度が上がったかの明記）
・おすすめの扱い方

<h1>誰向けの書籍？</h1>

`A.SQL Serverの処理の内部が知りたい人向け。`
要約はこう。「T-SQLについて学びたい」なら方向性が全く違うので別の書籍がよいでしょう。
例えば私はこの書籍に期待したのは、単純な検索では情報が断片化しているSQL Serverの内部動作に関する記述でした。実際にその情報は得られています。

:::note info
**分かる内容**
* SQL Serverがどうやって受け取った命令、処理をメモリ、ディスク上で処理しているのか。
* パフォーマンスは何で変わるのか、原因調査の方法と対処法のいくつか。
* スピンドル、スケジューラと言った、ただWindows上のソフトを触るだけでは理解できない基礎的な動作のロジックなど。
:::
例えばこれを読むと「トランザクションログは専用の物理ディスクに保存してやると動作が早くなる」ということが分かります。
これはスピンドル[^1]の動作上、トランザクションログの書き込みは前回の終了地点から開始しようとすることが関係します。
[^1]: 書籍内では「回転数を保持するディスク装置」（p32）と紹介されます。

おそらく今の説明ではわからない方がいるかと思いますが、それがこの書籍で分かるようになるということです。物理のCPUやディスクの話、果てはWindowsOSのスケジューラやら何やら…………ちょっとエンジニアをしていると「聞いたことはあるんだが具体的にどういうものでどう利用するロジック、ガジェットなのかわからない」と思っていたものがSQL Serverの内部構造の知識と今ならセットでこのお値段、というわけです。

また、深度も恐らく中々のものです。インメモリOLTPのデータの管理の仕方、実は結構いろいろあるインデックスの種類、SQL Serverタスクって内部的にどう処理される順番が決まってるの…………こういった一個一個をネットで調べると単語を知るのにさえ時間を取りそうな内容がスパッとまとまっているのも魅力的ですね。
<br>

:::note alert
**注意点**
* T-SQLの説明はほぼない。当然SQLの知識も半ば前提。
* データベース設計の時に「考慮する点」は新しく提供してくれるが、設計の理論などはなし。
* 絵で見てわかると書いているが、絵が普通に分かりにくい場合がある。
:::
一つ目は「ゑ？」という方もいらっしゃると思いますが、これは「SQL Serverの仕組み」をまじめに書いてます。SQLの知識はもはや知ってて当然の面構えです。[^2]
[^2]: 実際には説明がありますが、これで分かる人はこの書籍の内容を自力で調べてたどりつける可能性があります。それぐらい内容は薄い。

もちろんSQL Serverで使われるT-SQLの文法などもあんまり説明がないです。幸い、SQL自体の動作はネットでも調べればわかりますし、独学か別書籍を使うと安心です。

二つ目については単純な話で、この書籍では特にシナリオを想定して解説したりするような趣はないので、ひたすら技術だけが頭に押し込まれていきます。結果的にデータベース設計に寄与することはありますが、頭で繋げていくスキルを自力で賄わなければ特に有益な情報にはならないでしょう。

三つ目は取り扱い分野上で起きている問題です。絵の密度がどうしても高くならざるを得ないときに自然とイラスト自体が見づらくなってしまっている点がいくつかありました。基本的にはある方が分かりやすいので悪いことではないのですが、ここも含めてタイトルほど「初学者向け」っぽさは無いです。[^3]
[^3]: 本当に一からの初心者がAmazonでなんとなく見つけて買うと、パンクしてSQL Serverが嫌いになれそうなレベルの内容ではあります。往々にしてPCとはなんたるか云々、メモリの動作とは云々、というのは抽象化して便利になったものに触れてきた初学者にとっては重ったるいものではないでしょうか。

<h1>実際に何が出来るようになるのか</h1>

`データベースの設計、チューニングに際してアイデアの引き出しが増える。あるいは、クリティカルな対処を知識として蓄積できる。`
ここまでで動作の知識が書かれて続けた難解な内容のような印象があるかもしれませんが、断片的に合っています。
なのでケース事例で、「この本を読めばこんな判断基準が増える」というのを明示します。

**・インデックスを付ける、という概念自体の拡張**
```mermaid
graph TD;
テーブル-->非クラスタ化インデックス
テーブル-->クラスタ化インデックス
テーブル-->列ストアクラスタ化インデックス
テーブル-->列ストア非クラスタ化インデックス
```
```mermaid
graph TD;
メモリ最適化テーブル-->ハッシュインデックス
メモリ最適化テーブル-->インメモリ非クラスタ化インデックス
メモリ最適化テーブル-->列ストアインデックス
```
上記図表が分かりやすいのですが、「テーブルにインデックスを付けよう！」という着想でこれだけ選択肢が出てきます。もっとあるかもしれません。
例えばハッシュインデックスは特定一件のデータを取り出すのにはめっぽう強く、インメモリ非クラスタ化インデックスはある程度の範囲のデータを取り出すときにパフォーマンスが保たれます。

ではそれは何故？　そもそもメモリ最適化テーブルとは？　いつ使う？　といった観点を細かに実際の部品上での動作単位から精査する際にこの書籍はまさにクリティカルな内容を提供します。
<br>

**・パフォーマンスの調査を行うためのツール**
![スクリーンショット 2023-08-02 153627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523412/f3874fdf-9d14-965a-829f-4ba2288e9d99.png)
これは何でしょうか。見たことがないのであればこの書籍が教えてくれます。こちらは
```
DBCC MEMORYSTATUS
GO
```
この二行のSQLを実行することで返されるデータで、SQL Serverのメモリの状況のスナップショット[^4]です。
[^4]: その時点での内容をそのまま丸ごと保存した内容。

このSQL自体ももちろん書籍で言及されており、各項目についてもある程度の説明があります。こういったSQL Server上でのモニタリングのための機能やSQLが解説されていることも大きな強みです。

目を引く（というかシンプルに視界が開ける感覚がする）内容はこの二つです。後は実際のコンピュータの部品の動作と合わせて学んだり、旧WindowsOSやSQL Serverの仕様を踏まえながら歴史を紐解くことが出来るので、総じて「何が出来るか以前に何故そうなったか」を詳しく解説しています。

<h1>おすすめの使い方</h1>

私もこれからどんどんやっていこうと思っているところなので、おすすめというか「多分これが一番早いと思います」という感じの利用方法です。
この場合、理解を深める使い方と理解を広げる使い方の二つがあると思うので、どちらに分類されるかも明記しておきます。
<br>

**1.実際にSQL Server上でデータベースを作成する**`理解を深める使い方`
初学者（設計経験も保守経験もない場合）ならもうこれですね、これに尽きます。とりあえず大雑把でいいので組み立てましょう。私も絶賛挑戦中です。
というのも、触ってみると「あれ？　ここはどうなってるんだ？」は簡単に発生しうるからです。読書はあくまで与えられた文字に終始しますが、実際のシステムというのはこの本の内容を包括した大きな一つのコンテンツなのです。それを体感するのに最短ルート。

参考になりそうな内容として、[SQL Server、とりわけSSMSについての学習用サイトです](https://sql55.com/sql-server/)。

実際のデータベースの構築や調整ではむしろ書籍の内容は背景にあるものなので、時折「近い内容を書籍で見たな」が発生します。その好奇心で深堀する形だとスムーズにはなるでしょう（偏るので程度はあります）。
実は探せばMicrosoftがサンプル用のデータベースとかの用意もしてくださっているので、そちらを使って準備はほどほどにいざ実践というのも手でしょう。
<br>

**2.MicrosoftのLearnを用いてSQL Serverについて学習する**`理解を広げる使い方`
これを機にSQL Serverの他の仕様を理解しようというやり方です。
公式のドキュメントなので頼りにはなるのですが、時々SQLが和訳されてて意味不明なことになってたり、文意が適切に訳されていなくて確認問題が機能しないなどの問題はあります。適宜自動翻訳を外してにらめっこすることは覚悟して下さい。
Azureなどの内容が増えてきているので、今回紹介している書籍とは関係ない領域もSQL Serverとして割と簡単に学べますが、逆に言うと際限がないのでとりあえず身に着けたいスキルだけ見た方がいいかもしれません。


<h1>おわりに</h1>

「絵で見てわかるSQL Serverの仕組み」について長々と取り上げましたが個人的な書籍選びのポイントについて軽く書いて、どういう理由から薦めているかの背景を出して終わりにします。

少なくとも私は、基本的なツールの使い方とか、勉強の仕方とか、特定文法の構築方法だとか…………そういう観点で書籍は購入しなくてよいと思っています。
具体的にはこれらが大切に思えます。
<br>

`1.単にコンテンツ単体を予備知識なしで調べても出てこない内容が含まれること`
「SQL Serverの動作にはディスクの動作がどう関係しているか」という観点はなかなか見つからないということです。
正直物理メモリは関係するし、既存のWindowsのスケジューラは関係するし、どれもこれも私の中で結びつきがない情報でした。これを「SQL Server」という単位で取りまとめて、何百ページも記述されていると自分が考えもつかなかった関連技術や手法が必ず出てきます。
これが分かるものです。
<br>

`2.情報密度が高いこと`
当たり前のことが分かる書籍は”買い”だと経験則で思っています。
経済学の難しい長々とした数式がわかる本より、需要曲線と供給曲線とナッシュ均衡を押しなべてさっくり教えて欲しい。そこからナッシュ均衡について難しいことを言って欲しい。
むしろ、応用だったり発展的な内容はネットが強いと思います。
<br>

`3.読んだ後も字引に使いやすい本`
これは間違いなく大事です。なぜなら人間はどうせ忘れるためですね、最初から辞書にするつもりで買うのです。私に関しては。


入りは大抵ネットの知識で事足りますが、複雑化するととりあえず書籍を買いたくなりますね。身銭は無限ではないのでトレードオフを常に迫られる。苦しい。