Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips

751 views

Published on

SQL Server 管理者におくる SQL Server on Linux Tips

Published in: Data & Analytics
  • Be the first to comment

de:code 2018 DA06 SQL Server 管理者におくる SQL Server on Linux Tips

  1. 1. SQL Server 管理者におくる SQL Server on Linux Tips DA06
  2. 2. 本日の内容 SQL Server on Linux SQL Server on Linux Tips • Tip #1 : • Tip #4 : https://github.com/MasayukiOzawa/decode-2018-demo
  3. 3. SQL Server on Linux
  4. 4. SQL Server は稼働プラットフォームを選択可能に • Windows Server / Windows Client • RedHat Enterprise Linux (RHEL) 7.3/7.4 • SUSE Enterprise Linux (SLES) v12 SP2 • Ubuntu 16.04 LTS • Docker: Windows & Linux containers Windows Linux/Windows container Linux メモリ 2 GB ※ ファイルシステム XFS or EXT4 (and NFS 4.2 以上) ディスク領域 6 GB プロセッサ速度 2 GHz プロセッサコア 2 Cores プロセッサの種類 X64 と互換性のある CPU のみ Installation guidance for SQL Server on Linux https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-setup Technical support policy for Microsoft SQL Server https://support.microsoft.com/ja-jp/help/4047326/support-policy-for-microsoft-sql-server
  5. 5. SQL Server on Linux Windows Linux エディション Developer, Express, Web, Standard, Enterprise   サービス Database Engine, Integration Services   ML Services, Analysis Services, Reporting Services, MDS, DQS  ミッションクリティカル パフォーマンス 最大コア数 無制限 無制限 インスタンスごとの最大メモリサイズ 24 TB 12 TB 最大データデータベースサイズ 524 PB 524 PB 基本的な OLTP (Basic In-Memory OLTP, Basic operational analytics)   高度な OLTP (Advanced In-Memory OLTP, Advanced operational analytics, adaptive query processing)   基本的な高可用性 (2 ノード 単一データベースのフェールオーバー, 読み取り不可能なセカンダリ)   高度な高可用性 (複数ノードの Always On, 複数データベースのフェールオーバー, 読み取り可能なセカンダリ)   セキュリティ 基本的なセキュリティ (基本的な監査, 行レベルセキュリティ, 動的データマスク, Always Encrypted)   高度なセキュリティ (透過的なデータ暗号化 (TDE : Transparent Data Encryption))   データウェアハウス PolyBase  基本的なデータウェアハウス/データマート (基本的な In-Memory 列ストア, パーティショニング, 圧縮)   高度なデータウェアハウス(高度な In-Memory 列ストア)   高度なデータ統合 (あいまいグループ化と参照)   ツール Windows エコシステム : 全機能の管理 & 開発ツール (SSMS & SSDT), コマンドラインツール   Linux/OSX/Windows エコシステム : 開発ツール (VS Code), DB 管理のための GUI ツール (SQL Operations Studio ), コマンドラインツール   開発 プログラミング (T-SQL, CLR, Data Types, JSON, Graph)   Windows ファイルシステム統合 – File テーブル  BI & 高度な解析 企業のビジネスインテリジェンス (多次元モデル, 基本的な表形式モデル)  Machine Learning Services (R / Python 統合)  ハイブリッドクラウド Stretch Database 
  6. 6. SQL Server SQL Server on Linux Architecture SQL OS Direct API SQL OS v2 Win32 like APIs Library OS Database Engine SSIS Linux Host Extension Mapping to OS System Call (IO / Memory / CPU Scheduling) Linux Kernel
  7. 7. SQL Server 用ツールの提供状況 ツール GUI SQL Server Management Studio SQL Server の標準的な管理ツール ✔ Visual Studio Code クロスプラットフォームに対応した高機能エディター SQL Server 向けの拡張機能の追加によりクエリ実行が可能 https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-develop-use-vscode ✔ ✔ Microsoft SQL Operations Studio クロスプラットフォームに対応した GUI の管理ツール https://github.com/Microsoft/sqlopsstudio ✔ ✔ CUI sqlcmd コマンドラインから T-SQL を実行 ✔ ✔ bcp コマンドラインでデータをインポート / エクスポート ✔ ✔ mssql-scripter スキーマ定義 / データ INSERT 用スクリプトを生成する Python ベースのツール https://github.com/Microsoft/sql-xplat-cli ✔ ✔ DBFS FUSE を使用してDMV / カスタムクエリで取得したデータを 仮想ファイルシステムとしマウントするツール https://github.com/Microsoft/dbfs ✔ mssql-cli 新しいコマンドラインツール 対話型のクエリ実行を、入力補完を使用しながら実行可能 https://github.com/dbcli/mssql-cli 今後のリリースでパイプによるコマンドラインの連携/出力データフォーマットの拡充/非対話型実行等を サポート予定 https://github.com/dbcli/mssql-cli/blob/master/doc/roadmap.md ✔ ✔ PowerShell SQL Server PowerShell モジュールのフルセットを使用可能 https://docs.microsoft.com/ja-jp/sql/powershell/download-sql-server-ps-module ✔ PowerShell Core 6.0 クロスプラットフォーム対応の PowerShell 2018/5 時点ではSQL Server PowerShell モジュールのサブセットを使用可能 https://www.powershellgallery.com/packages/Sqlserver/ ✔ ✔
  8. 8. プロセスとディレクトリ構成 プロセスの構成 ディレクトリ構成 SQLPAL Monitor SQLPAL / sqlservr.exe SSIS は「/opt/ssis」「/var/opt/ssis」が使用されるが、関係性については mssql と同様
  9. 9. ファイルレイアウト
  10. 10. データベースの互換性 互換性レベル 100 SQL Server 2008 110 SQL Server 2012 120 SQL Server 2014 130 SQL Server 2016 140 SQL Server 2017 ALTER DATABASE (Transact-SQL) 互換性レベル https://docs.microsoft.com/ja-jp/sql/t-sql/statements/alter-database-transact-sql-compatibility-level
  11. 11. SQL Server on Linux のログ 次のログを利用することができる RAISERROR (Transact-SQL) https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/raiserror-transact-sql RAISERROR WITH LOG でメッセージを出力することも可能※ (Windows の場合、WITH LOG はイベントログに出力される) マクロ名 出力内容 programname sqlservr facility daemon priority info ※出力するメッセージはシングルバイト文字を使用または、メッセージを 出力するログインの言語設定は「English」の利用を検討 2 バイト文字については、syslog の出力が想定通り行われないことがある Troubleshoot SQL Server on Linux https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-troubleshooting-guide
  12. 12. Demo
  13. 13. Tip #1 : SQL Server on Linux の インストールと構成変更ツール
  14. 14. SQL Server on Linux のインストール 「/opt/mssql/bin/mssql-conf setup」でインストール
  15. 15. 特定の照合順序の設定 1. 環境変数に照合順序を指定して、セットアップを実行 https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-environment-variables 2. インストール後に「mssql-conf」で照合順序を変更 https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-mssql-conf MSSQL_COLLATION=Japanese_XJIS_140_CI_AS /opt/mssql/bin/mssql-conf setup /opt/mssql/bin/mssql-conf set-collation sys.fn_helpcollations (Transact-SQL) https://docs.microsoft.com/ja-jp/sql/relational-databases/system-functions/sys-fn-helpcollations-transact-sql
  16. 16. 「SQL Server 構成マネージャー」相当のスクリプトベースの構成ツール • 「/var/opt/mssql/mssql.conf」に各種設定が出力される 「/opt/mssql/bin/mssql-conf help」 「/opt/mssql/bin/mssql-conf list」 で設定項目を確認 mssql-conf
  17. 17. SQL Server が利用可能な物理メモリの制限 既定では、物理メモリの 80% が利用可能 SELECT physical_memory_kb FROM sys.dm_os_sys_info SELECT total_physical_memory_kb, available_physical_memory_kb FROM sys.dm_os_sys_memory /opt/mssql/bin/mssql-conf set memory.memorylimitmb <サイズ (MB)> 16 GB の環境の、既定の設定でのメモリ使用状況
  18. 18. 参考) SQL Server on Linux の構成のベストプラクティス https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-performance-best-practices 対象 設定内容 設定 SQL Server プロセス / NODE アフィニティの設定 NUMA ノードが 1 ノードの場合でも、「PROCESS AFFINITY」を設定し、SQL Server が使用するプロセッサの アフィニティを指定 • ALTER SERVER CONFIGURATION https://docs.microsoft.com/ja-jp/sql/t-sql/statements/alter-server-configuration-transact-sql tempdb のデータファイルの設定 SQL Server on Linux では、インストール時の CPU コア数に関わらず、データファイルが 1 ファイルで構成されてい るため、手動で複数のデータファイル化を実施 • Recommendations to reduce allocation contention in SQL Server tempdb database https://support.microsoft.com/ja-jp/help/2154845/ mssql-conf によるメモリ上限の設定 既定の設定では物理メモリの 80% までしか利用されないため、残り 20% のサイズによっては、メモリ上限の設定 変更を実施 Linux OS カーネルのハイパフォーマンス設定 (CPU) cpupower / x86_energy_perf_policy / min_perf_pct / max_cstate カーネルのハイパフォーマンス設定 (ディスク) blockdev / sched_min_granularity_ns / sched_wakeup_granularity_ns / dirty_ratio / dirty_background_ratio / swappiness 複数 NUMA ノード環境のカーネル設定 numa_balancing 仮想アドレス空間のカーネル設定 max_map_count マウントオプション noattime オプションの指定
  19. 19. Tip #2 : SQL Server 2017 の更新プログラム
  20. 20. SQL Server 2017 以降の更新プログラムの提供形態 SQL Server 2017 以降、Service Pack は廃止され、更新は 累積修正プログラム (CU) / 重要な更新プログラム (GDR) で提供 https://support.microsoft.com/ja-jp/help/4041553/ https://blogs.msdn.microsoft.com/sqlreleaseservices/announcing-the-modern-servicing-model-for-sql-server/ リリース後、最初の 12 か月間は毎月 CU が提供
  21. 21. CU の提供状況 (2018/5 時点) SQL Server on Linux 特有の改善点SQL Server 2017 build versions https://support.microsoft.com/ja-jp/help/4047329
  22. 22. SQL Server on Linux の CU の適用 Linux では、新しいバージョンのパッケージにアップデートすることで CU の適用が行われる https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-release-notes#release-history Platform Package update command(s) RHEL sudo yum update mssql-server SLES sudo zypper update mssql-server Ubuntu sudo apt-get update sudo apt-get install mssql-server Platform Package update command(s) RHEL sudo yum downgrade mssql-server-<version_number>.x86_64 SLES sudo zypper install --oldpackage mssql-server=<version_number> Ubuntu sudo apt-get install mssql-server=<version_number> sudo systemctl start mssql-server アップデート ダウングレード Installation guidance for SQL Server on Linux https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-setup#upgrade
  23. 23. Tip #3 : SQL Server on Linux の パフォーマンス情報の取得
  24. 24. SQL Server 固有情報の取得方法 パフォーマンスモニターが使用できないため、SQL Server 固有のパフォーマンス情報については DMV から取得 https://docs.microsoft.com/ja-jp/sql/relational-databases/system-dynamic-management-views/sys- dm-os-performance-counters-transact-sql cntr_type 取得値の加工方法 値の例 65792 瞬間的な値を示し、値をそのまま利用 SQLServer:Memory Manager¥Database Cache memory (KB) 272696576 1 秒あたりのイベント発生率を示す 後続の値との差を取り、2値間のタイムスタンプの秒数で除算 (A2 – A1) / (A2 Timstamp – A1 Timestamp) SQLServer:SQL Statistics¥Batch Requests/sec 537003264 1073939712 比率をパーセントで表すことができる値 Base Counter の値で除算することで、比率を算出 RAW_FRACTION (537003264) / RAW_BASE (1073939712) * 100 SQLServer:Buffer Manager¥Buffer cache hit ratio SQLServer:Buffer Manager¥Buffer cache hit ratio base
  25. 25. SQL Server のパフォーマンスモニタリングの構成例 SQLCAT から公開されている Monitoring Tool から学ぶ https://blogs.msdn.microsoft.com/sqlcat/2017/07/03/how-the-sqlcat-customer-lab-is-monitoring-sql-on-linux/ https://github.com/Microsoft/mssql-monitoring https://docs.microsoft.com/ja-jp/azure/log-analytics/log-analytics-data-sources-collectd
  26. 26. Demo
  27. 27. Tip #4 : SQL Server on Linux で 利用可能な機能
  28. 28. サポートされていない機能 機能領域 サポートされていない機能 / サービス データベースエンジン トランザクションレプリケーション / マージレプリケーション ストレッチデータベース Polybase 3rd Party の接続による分散クエリ MSDTC を必要とする分散トランザクション システム拡張ストアドプロシージャ (xp_cmdshell 等) ファイルテーブル/FILESTREAM EXTERNAL_ACCESS / UNSAFE な CLR アセンブリの実行 (SQLCLR) バッファプール拡張 名前付きインスタンス SQL Server エージェント 次のサブシステム CmdExec/PowerShell/キューリーダー/SSIS/SSAS/SSRS 警告 / ログリーダーエージェント / 変更データキャプチャ / 管理対象バックアップ SSMS メンテナンスプラン データコレクション 機能領域 サポートされていない機能 / サービス 高可用性 データベースミラーリング セキュリティ 拡張キー管理 OS のローカルアカウントを使用したWindows 認証 AD 認証を使用したリンクサーバー / 可用性グループ サービス SQL Server Browser SQL Server R Services (ML Services) StreamInsight Analysis Services (SSAS) Reporting Services (SSRS) Data Quality Services (DQS) Master Data Services (MDS) Release notes for SQL Server 2017 on Linux https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-release-notes Editions and supported features of SQL Server 2017 on Linux https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-editions-and-components-2017
  29. 29. SSMS の on Linux の接続では、メンテナンスプランが利用できない 代替方法として、次の 2 種類を検討 メンテナンスプラン Linux 版に接続した場合、 メンテナンスプランは表示されない
  30. 30. DB メンテナンス用 SSIS パッケージの作成 バックアップ先は UNIX 形式で指定 クリーンアップタスクのパスは、 「C:<UNIX 形式のパス>」※で指定 ※ファイル削除で使用される「master.dbo.xp_delete_file」が UNIX 形式のパスの指定では、無効なパラメーターとして認識してしまうため
  31. 31. MSDTC による分散トランザクション SQL Server on Linux では、MSDTC の利用はできない • 分散トランザクションの昇格の例 : • 「BEGIN DISTRIBUTED TRANSACTION」による MSDTC の分散トランザクションの実行 • トランザクション内でリンクサーバー経由でリモート の DB を更新 • Transaction Scope 内で「複数の接続」※ をオープンし、分散トランザクションに昇格 トランザクションの昇格 https://docs.microsoft.com/ja-jp/sql/relational-databases/clr-integration-data-access-transactions/transaction-promotion DTC のトランザクションに昇格しようとしたが、 MSDTC が使用できないためエラーとなる
  32. 32. DTC を使用したトランザクションの利用の確認 既存環境で、DTC を使用したトランザクションを利用しているか 確認したい場合、次の情報を取得
  33. 33. bcp / sqlcmd は一部の挙動が Windows と異なる • bcp 参考) コマンドラインツールの動作の違い 1/2 bcp による接続 https://docs.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/connecting-with-bcp
  34. 34. • sqlcmd 参考) コマンドラインツールの動作の違い 2/2 sqlcmd による接続 https://docs.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/connecting-with-sqlcmd iconv -f Shift-JIS -t UTF-8 /mnt/share/Query.sql ¥ | sed ¥ -e 's/$$var1/de:code 2018/' ¥ -e's/$$var2/DB 管理者/' > Query2.sql sqlcmd -S xxxx -U xxx -P xxxx -i /mnt/share/Query2.sql sqlcmd -S xxxxx -U xxxxx -P xxxx -i E:¥share¥Query.sql -v Var1="de:code2018" -v Var2 = "DB 管理者" SELECT '$(Var1)' AS C1, '$(Var2)' AS C2, 'ツール' AS C3 :setvar Var1 "$$var1" :setvar Var2 "$$var2" SELECT '$(Var1)' AS C1, '$(Var2)' AS C2, 'ツール' AS C3
  35. 35. Demo
  36. 36. Tip #5 : SQL Server on Linux の 可用性環境の構成
  37. 37. SQL Server on Linux のクラスター環境 https://docs.microsoft.com/ja-jp/sql/sql-server/partner-hadr-sql-server SQL Server (Standby) Configure failover cluster instance - SQL Server on Linux (RHEL) https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-shared-disk-cluster-configure Availability groups for SQL Server on Linux https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-availability-group-overview
  38. 38. 2 台の同期レプリカ + 構成のみのレプリカ 読み取りのスケール / データ保護 / 高可用性 3 台の同期レプリカ 読み取りのスケール / データ保護 / 高可用性 2 台の同期レプリカ 読み取りのスケール / データ保護 AlwaysOn 可用性グループ (AG) のノード数の考慮点 SQL Server on Linux で AG を「自動復旧可能な高可用性環境」※ の 構成とするためには「3 ノード構成」が必要 High availability and data protection for availability group configurations https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-availability-group-ha ※自動フェールオーバー/自動的な更新可能なプライマリへの昇格が 可能な構成 プライマリ レプリカ セカンダリ レプリカ プライマリ レプリカ セカンダリ レプリカ セカンダリ レプリカ プライマリ レプリカ セカンダリ レプリカ 構成のみのレプリカ メタデータのみ同期
  39. 39. Appendix
  40. 40. SQL Server on Linux 参考情報 1/5 https://www.microsoft.com/ja-jp/sql-server/sql-server-2017-pricing https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-overview https://support.microsoft.com/ja-jp/help/4047329/sql-server-2017-build-versions https://support.microsoft.com/ja-jp/help/4047326/support-policy-for-microsoft-sql-server https://www.microsoft.com/en-us/sql-server/developer-get-started/ https://www.microsoft.com/ja-jp/sql-server/ https://github.com/Microsoft/sql-server-samples https://github.com/Microsoft/mssql-server-ha
  41. 41. SQL Server on Linux 参考情報 2/5 https://www.microsoft.com/ja-jp/cloud-platform/documents-search https://info.microsoft.com/JA-SQLDB-WBNR-FY18-01Jan-19-SQLServer-MCW0002801_02OnDemandRegistration.html https://info.microsoft.com/JA-SQLDB-WBNR-FY18-02Feb-07-SQLServer2017NewFunctionforLinuxUsers-MCW0002855_02OnDemandRegistration- ForminBody.html https://info.microsoft.com/JA-SQLDB-WBNR-FY18-01Jan-31-SQLServerLinuxversion-MCW0002852_02OnDemandRegistration.html https://info.microsoft.com/JA-AzureOSS-WBNR-FY18-02Feb-27-WebSeminarLetsputSQLServeronLinux-MCW0003096_02OnDemandRegistration- ForminBody.html https://info.microsoft.com/JA-SQLDB-WBNR-FY18-03Mar-07-SQLServerSecurityforLinux-MCW0002860_02OnDemandRegistration- ForminBody.html
  42. 42. SQL Server on Linux 参考情報 3/5 http://www.pass.org/marathon/2017/december/Schedule.aspx http://www.pass.org/24hours/2018/april/Schedule.aspx https://mva.microsoft.com/en-US/training-courses/installing-configuring-and-managing-microsoft-sql-server-on-linux-18305 https://info.microsoft.com/SQL-Server-on-Linux-Webinar-OnDemand.html https://info.microsoft.com/sql-server-on-linux-town-hall-sql-server-agent-on-demand.html https://info.microsoft.com/sql-server-on-linux-town-hall-backup-on-demand.html https://info.microsoft.com/sql-server-2017-on-linux-webinar-series.html https://info.microsoft.com/sql-server-on-linux-town-hall-monitoring-on-demand.html https://info.microsoft.com/SQLTownHall-Troubleshooting-Techniques-for-SQL-Server-on-Linux-OnDemand.html
  43. 43. SQL Server on Linux 参考情報 4/5 https://info.microsoft.com/sql-server-on-linux-town-hall-high-availability-on-demand.html https://info.microsoft.com/sql-server-on-linux-town-hall-client-tools-on-demand.html https://info.microsoft.com/linux-town-hall-sql-server-on-linux-tools-mssql-cli-and-mssql-scripter-on-demand-registration.html https://info.microsoft.com/sql-server-on-linux-town-hall-security-on-demand.html https://info.microsoft.com/sql-server-on-linux-town-hall-new-servicing-model-on-demand-registration.html https://info.microsoft.com/sql-server-on-linux-town-hall-upgrade-migration-OnDemandRegistration.html https://info.microsoft.com/Configuring-SQL-Server-on-Linux-ondemand.html https://info.microsoft.com/Always-on-Availability-Groups-on-Kubernetes-and-Open-Shift-Registration.html https://info.microsoft.com/Migrating-from-Oracle-to-SQL-Server-on-Linux-Registration.html
  44. 44. SQL Server on Linux 参考情報 5/5 https://channel9.msdn.com/Events/Build/2018/BRK3308 https://channel9.msdn.com/Events/Build/2018/BRK3315 https://channel9.msdn.com/Events/Build/2018/BRK2202 https://channel9.msdn.com/Events/Build/2018/BRK3316
  45. 45. © 2018 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

×