#author("2022-01-24T07:59:49+00:00","default:admin","admin") #author("2022-03-09T12:13:19+00:00","default:admin","admin") ※ 特に表記がない限り、SQL Server 2016 以降の情報を記載 -[[SQLShack:https://www.sqlshack.com/]] -[[Oracle DBA のための SQL Server 2017 構成と管理のポイント:https://slidesplayer.net/slide/15840921/]] -[[SQL Server 入門:https://sql55.com/]] -[[SQL Serverの構造を理解する:http://enterprisezine.jp/dbonline/detail/8016]] -[[初心者が説明するMicrosoft SQL Server - SlideShare:https://www.slideshare.net/HitoshiNagahama/database-lounge-tokyo-3-lt]] -[[Microsoft、「SQL Server 2017」を発表 ~「CTP 2.0」の提供が開始:http://forest.watch.impress.co.jp/docs/news/1056084.html]] -[[マイクロソフト、次期SQL Serverとなる「SQL Server 2017」発表。DBMS内でTensorFlowやCNTKなどのディープラーニングを実行可能に:http://www.publickey1.jp/blog/17/sql_serversql_server_2017dbmstensorflowcntk.html]] -[[DBMS市場のリーダーはマイクロソフト。オラクルが続き、AWSとSAPが追う。IBMは地位後退。ガートナーがDBMSのマジッククアドラント2017年版を発表:http://www.publickey1.jp/blog/17/dbmsawssapibmdbms2017.html]] -[[DBアーキテクチャ比較表:https://www.pgecons.org/wp-content/uploads/PGECons/2015/WG2/14_Appendix_01_Architecture.pdf]] *SQL Server 2008 [#rfde0999] -[[昔書いたクエリを SQL Server 2008 に対応してみた:https://ryuchan.hatenablog.com/entry/2016/05/01/000726]] *SQL Server 2019 [#aec3cec2] -[[SQL Serverのダウンロード:https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads]] -[[【SQL Server 2019】 Developer と Express の違い:https://qiita.com/Sanada-code/items/fb19e98f9201bf1d8e1f]] *[[SQL Server 2017:https://www.microsoft.com/ja-jp/sql-server/sql-server-2017]] [#r31fad64] -[[Linux版Microsoft SQL Server 2017がベンチでWindows版を上回る理由 - 日本マイクロソフトが最新SQL Server 2017を紹介:http://news.mynavi.jp/articles/2017/10/26/mssqlserver2017/]] -[[MicrosoftはどうやってSQL ServerをLinuxへポートしたか、ついに2017リリース候補がローンチ:http://jp.techcrunch.com/2017/07/18/20170717how-microsoft-brought-sql-server-to-linux/]] -[[SQLCAT から SQL Server on Linux のモニタリングツールが公開されました:http://blog.engineer-memo.com/2017/07/09/sqlcat-%E3%81%8B%E3%82%89-sql-server-on-linux-%E3%81%AE%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%84%E3%83%BC%E3%83%AB%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97/]] -Windows Serverと同等のレベルでLinuxのサポートを実現。ミッションクリティカルでの利用に高い稼働率が必要とされる分野でもLinuxの利用を実現 -ノードとエッジを作成し、複雑な関係データの構築を可能にするグラフデータ処理機能を追加(Azure SQL Databaseにも同様の機能を追加) -効率よく自動的に処理を行うためのアダプティブ・クエリ・プロセッシング機能を追加 -データベース内分析処理にPythonまたはRを使った並列処理機能を追加 *SQL Server 2016 [#vc837163] -[[ビルド バージョンの SQL Server の 2016:https://support.microsoft.com/ja-jp/help/3177312]] **Service Pack [#m8a63900] -[[SQL Server 2016 の最新の Service Pack を入手する方法:https://support.microsoft.com/ja-jp/help/3177534]] --Service Pack は累積的であり、 最新の Service Pack には新しい修正プログラムと共に、それ以前の Service Pack に含まれていたすべての修正プログラムが含まれている --最新の Service Pack をインストールする前に、以前の Service Pack をインストールする必要はない -[[SQL Server 2016 SP2 用の累積的な更新 5:https://support.microsoft.com/ja-jp/help/4475776/cumulative-update-5-for-sql-server-2016-sp2]] --[[修正:高い CPU 使用率が SQL Server のバッチ要求の数がある場合に:https://support.microsoft.com/ja-jp/help/4480635/fix-high-cpu-usage-when-there-are-many-batch-requests-in-sql-server]] --修正: Columnstore インデックスのビルド要求がタイムアウト時間 25 秒後 2016 の SQL Server のメモリ許可のタイムアウトが設定されている場合 -[[SQL Server 2016 SP2 用の累積的な更新 4:https://support.microsoft.com/ja-jp/help/4464106/cumulative-update-4-for-sql-server-2016-sp2]] -[[SQL Server 2016 SP2 用の累積的な更新 3:https://support.microsoft.com/ja-jp/help/4458871/cumulative-update-3-for-sql-server-2016-sp2]] -[[SQL Server 2016 SP2 用の累積的な更新 2:https://support.microsoft.com/ja-jp/help/4340355/cumulative-update-2-for-sql-server-2016-sp2]] --[[修正:「インデックスが壊れています"メッセージとサーバーが切断されたとき更新の統計情報のクエリ SQL Server にハッシュ集計を使用する場合:https://support.microsoft.com/ja-jp/help/4316858/fix-corrupted-index-message-and-server-disconnection-when-an-update-st]] -[[Server 2016 SP2 用の累積的な更新 1:https://support.microsoft.com/ja-jp/help/4135048/cumulative-update-1-for-sql-server-2016-sp2]] --[[FIX: アクセス違反が発生場合、インクリメンタルの統計情報は SQL Server のテーブルに自動的に更新:https://support.microsoft.com/ja-jp/help/4163478/fix-access-violation-when-incremental-statistics-automatically-updated]] ■SQL Server 2016 Service Pack 2 リリース情報 -[[https://support.microsoft.com/ja-jp/help/4052908/sql-server-2016-service-pack-2-release-information]] -[[たぶんTOP句に関する実行計画に関する更新:https://support.microsoft.com/ja-jp/help/4051361/optimizer-row-goal-information-in-query-execution-plan-added-in-sql-se]] ■SQL Server 2016 SP1 用の累積的な更新 8 -[[https://support.microsoft.com/ja-jp/help/4077064/cumulative-update-8-for-sql-server-2016-sp1]] *SQL Server 2008 [#rfde0999] -[[昔書いたクエリを SQL Server 2008 に対応してみた:https://ryuchan.hatenablog.com/entry/2016/05/01/000726]] *[[SQL Server 2017:https://www.microsoft.com/ja-jp/sql-server/sql-server-2017]] [#r31fad64] -[[Linux版Microsoft SQL Server 2017がベンチでWindows版を上回る理由 - 日本マイクロソフトが最新SQL Server 2017を紹介:http://news.mynavi.jp/articles/2017/10/26/mssqlserver2017/]] -[[MicrosoftはどうやってSQL ServerをLinuxへポートしたか、ついに2017リリース候補がローンチ:http://jp.techcrunch.com/2017/07/18/20170717how-microsoft-brought-sql-server-to-linux/]] -[[SQLCAT から SQL Server on Linux のモニタリングツールが公開されました:http://blog.engineer-memo.com/2017/07/09/sqlcat-%E3%81%8B%E3%82%89-sql-server-on-linux-%E3%81%AE%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%84%E3%83%BC%E3%83%AB%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97/]] -Windows Serverと同等のレベルでLinuxのサポートを実現。ミッションクリティカルでの利用に高い稼働率が必要とされる分野でもLinuxの利用を実現 -ノードとエッジを作成し、複雑な関係データの構築を可能にするグラフデータ処理機能を追加(Azure SQL Databaseにも同様の機能を追加) -効率よく自動的に処理を行うためのアダプティブ・クエリ・プロセッシング機能を追加 -データベース内分析処理にPythonまたはRを使った並列処理機能を追加 *仕様 [#u38db616] -[[SQL Server の最大容量仕様:https://docs.microsoft.com/ja-jp/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-2017]] *インデックス [#o38bfab0] **種類 [#a894c3a9] -クラスター化インデックス --主キーを設定することで暗黙的に作成されるインデックス、または明示的にクラスター化を指定して作成したインデックス --テーブル内に1つ -非クラスター化インデックス --UNIQUE制約を設定することで暗黙的に作成されるインデックス、または明示的に非クラスター化を指定して作成したインデックス **インデックスの構造 [#f77dcfab] -クラスター化インデックス、非クラスター化インデックス、共にBツリー **インデックスの使用確認 [#j6d258d1] -SQL Server Management Studioから、クエリエディターを起動 -[クエリ]メニュー > [推定実行プランの表示] を選択 **再構成と再構築 [#ib16fb24] -断片化の比率が30%以下の場合は再構成、30%超の場合は再構築を実行する ***再構成 [#ldbfa3fd] --オンラインで実行可能 ***再構築 [#c844fb88] --オフラインで実行 *カラムストアインデックス [#yefb4ec3] -文字通り、インデックスに必要なカラムだけをストアして作成したインデックス -クラスター化カラムストアインデックス(SQL Sever 2014 から更新可能) -非クラスター化カラムストアインデックス(SQL Server 2016 から更新可能) *ID連番 [#ndc2c798] -[[IDENTITY と SEQUENCE についてちょっとだけ書いた:http://odashinsuke.hatenablog.com/entry/2014/08/05/235002]] **IDENTIFY [#o3025c6d] -[[テーブルの列を自動インクリメント列(自動採番列)に設定する (SQL Server Tips):https://www.ipentec.com/document/document.aspx?page=sql-server-set-column-to-identity]] -[[IDENTITY プロパティ使用時の動作について:https://blogs.msdn.microsoft.com/jpsql/2014/05/01/identity/]] -テーブル単位での設定 -IDENTITY プロパティをテーブル列に指定した場合、追加した列では、行が追加 (Insert) される毎に、指定された増分の値を基に、自動的に ID 番号を採番することが可能になる -ID を自動的に採番したい場合、IDENTITY プロパティを使用することにより、番号を採番する仕組みをアプリケーション側で実装する手間を省くことができる -仕様上、次の点が保証されていない --連続された ID 値が採番されることを保証していない ---パフォーマンス上の理由から 採番される ID 値がキャッシュ上に保持されているため、サーバーの再起動や、データベースの再起動が発生した場合、キャッシュ上に保持された ID 値が失われ、次回 行挿入時に、前回 挿入された値から非連続的な ID が生成される場合がある --値の一意性を保証していない --値が再利用されることを保証していない **シーケンス [#x3ae1506] -SQL Server 2012 より追加 -テーブルとは独立したオブジェクトとして作成されるので、テーブル間で一連の連番を共有することが可能 -インクリメントする際の増分値や最大値まで達した時に最小値に戻って再度番号を振るといった循環の設定も可能 -シーケンスオブジェクトは NEXT VALUE FOR 関数を呼び出したタイミングで連番となる値を取得できますので、テーブルに連番を挿入する前に値の加工を行うこともできる -連続する値が欲しければ SEQUENCE を NO CHACE にして使うことが best **特殊な連番 [#o4b5e308] -[[SQL Serverで複合連番を自動採番する:年+シリアル/SqlServer:https://www.embedded-property.net/2014/10/sql-server%E3%81%A7%E8%A4%87%E5%90%88%E9%80%A3%E7%95%AA%E3%82%92%E8%87%AA%E5%8B%95%E6%8E%A1%E7%95%AA%E3%81%99%E3%82%8B%EF%BC%9A%E5%B9%B4%EF%BC%8B%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%8Fsqlserver/]] *ファイルグループ [#xe68d1d9] -[[ファイルグループにファイル追加後のデータ平準化:https://blog.engineer-memo.com/2010/12/02/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%BF%BD%E5%8A%A0%E5%BE%8C%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%B9%B3%E6%BA%96/]] *高可用性 [#zc0ec3fc] -[[SQL Server環境で高可用性を実現する 7つのポイント - SIOS.JP:https://sios.jp/bcp/bcblog/7tips-to-provide-ha-protecction-for-sql-server-environment/]] -[[SQL Serverで高可用性:https://sios.jp/bcp/bcblog/7tips-to-provide-ha-protecction-for-sql-server-environment/]] **AlwaysOn [#bdde6cc0] -[[SQL Server AlwaysOn 構築メモ(その1)前提知識の整理と基礎環境構築編:http://qiita.com/zaburo/items/5ca86becda6023b90f7e]] -[[SQL Server AlwaysOn 構築メモ(その2)WSFC(Window Server Failover Clustering)構築編:http://qiita.com/zaburo/items/cb8f82ebbe553ccbb6fe]] -[[SQL Server AlwaysOn 構築メモ(その3)AlwaysOn構築編:http://qiita.com/zaburo/items/3468af8cd7d89b4c8bd5]] -[[SQL Server AlwaysOn 構築メモ(その4)接続確認編:http://qiita.com/zaburo/items/055542f1f1b36668b87f]] -[[SQL Server AlwaysOn 構築メモ(その5)テストしてみる:http://qiita.com/zaburo/items/b25794fa2b05bcf331e7]] -[[SQL Server AlwaysOn 構築メモ(その6)その他(可用性グループへのDB追加など):http://qiita.com/zaburo/items/3c3d17051bb612828fda]] **バックアップ [#t0aeba50] -[[データベースの完全バックアップの作成 (SQL Server):https://msdn.microsoft.com/ja-jp/library/ms187510.aspx]] -[[Azure Virtual Machines おける SQL Server のバックアップと復元:https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/sql/virtual-machines-windows-use-storage-sql-server-backup-restore]] -[[SQL Server のバックアップの種類 - SQL Server 入門:http://sql55.com/column/sql-server-backup-types.php]] **レプリケーション [#ee58da8b] -[[SQL Server のレプリケーション:https://msdn.microsoft.com/ja-jp/library/ms151198.aspx]] -[[データベース ミラーリングとレプリケーション (SQL Server):https://msdn.microsoft.com/ja-jp/library/ms151799.aspx]] -[[レプリケーションの種類:https://msdn.microsoft.com/ja-jp/library/ms152531.aspx]] -[[SQL Server のレプリケーション - マイクロソフト系技術情報 Wiki:https://techinfoofmicrosofttech.osscons.jp:443/index.php?SQL%20Server%20%E3%81%AE%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3]] **トレースログ [#ob38741b] -[[SQL Server に発行されたクエリをログに出力する方法:https://www.projectgroup.info/tips/SQLServer/MSSQL_00000008.html]] -[[Profilerを使わずに、SQL Server Expressに発行されたクエリを取得する方法:http://nishio.hateblo.jp/entry/20120906/1346945058]] -[[SQL Server SQLのトレース:http://d.hatena.ne.jp/tigerii/20160317/1462416362]] -[[DBCC TRACEON - トレース フラグ (TRANSACT-SQL):https://docs.microsoft.com/ja-jp/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql]] -[[サーバーレベルのロール:https://docs.microsoft.com/ja-jp/sql/relational-databases/security/authentication-access/server-level-roles]] --dbccコマンド実行には sysadmin ロールが必要 ***トレースフラグ [#x1a3be41] -4032 ... SQL Serverが受け取ったコマンドをトレースするためのフラグ【起動時のみ設定可】 -3605 ... そのトレース結果をエラーログに出力するためのフラグ ***ログ確認 [#w0aeff9c] -PowerShellでSELECT文のクエリを監視 > Get-Content 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\ERRORLOG' -wait -tail 10 | Select-String "SELECT" *Tips [#a21f47e2] -[[SQL Serverにおける日付時刻の小話:http://www.slideshare.net/norayuni/1110-lt-presentation]] -[[日付と時刻のデータ型および関数:http://technet.microsoft.com/ja-jp/library/ms186724.aspx]] -[[SQL Serverの現在の接続数を確認する - SQL Server Tips:https://www.ipentec.com/document/document.aspx?page=sql-server-view-database-connections-in-performance-monitor]] -[[sql-server – SSMS内から.SQLファイルのセットを実行するにはどうしたらいいですか?:https://codeday.me/jp/qa/20181224/88946.html]] -[[SQLServer: 現在実行中クエリのリアルタイムトラブルシューティング:https://qiita.com/maaaaaaaa/items/83e4f984e63fee4dae34]] **接続数確認 [#s439b8c4] -[[接続元からの接続数をチェックしてみる:http://ryuchan.hatenablog.com/entry/2015/02/06/073349]] SELECT [接続元IPアドレス] = ec.client_net_address, [接続元ポート] =ec.client_tcp_port, [接続プログラム] =es.program_name, [接続インターフェース] = es.client_interface_name, [ホスト名] =es.host_name, [ログイン名] =es.login_name, [接続数] = COUNT(*) FROM sys.dm_exec_sessions AS es INNER JOIN sys.dm_exec_connections AS ec ON es.session_id = ec.session_id GROUP BY ec.client_net_address, ec.client_tcp_port, es.program_name, es.client_interface_name, es.host_name, es.login_name