GW 中は de:code 2019 のセッション準備などを進めており、あまり情報のキャッチアップをできていなかったのですが、最終日ぐらいは、SQL Server / SQL Database 関連の最新情報を眺めてみようかと。
Read the rest of this entry »
Archive for the ‘SQL Server’ tag
Build 2019 開始前に GW 中の SQL Server 関連の話題をキャッチアップしてみる
SQL Server 2019 CTP 2.5 と SSMS 18.0 GA が公開されました。
SQL Server 2019 CTP 2.5 と SSMS 18.0 が公開されました。
SSMS 18.0 は今回のタイミングで GA となり、正式版です。
Build 2019 で新しい CTP 出るのかなと思っていたのですが、4 月内に新しい Preview 出てきましたね。
Build では新しい発表あるのでしょうか??
公式のアナウンスとしては以下になります。
SQL Server のログイン / ユーザーの権限を SSMS を使用しながら確認してみる
SQL Server の権限設定ですが、基本的な考え方は プリンシパル (データベース エンジン) に記載されている内容となります。
権限としては、次の二種類に分けられます。
- ログイン : インスタンスレベルでの操作権限
- ユーザー : データベースレベルでの操作権限
「ログイン」と「ユーザー」という複数のプリンシパルに分かれているため、理解しづらい構成になっているのですが、SSMS を使用しながらであればわかりやすいかなと思いましたので軽くまとめてみようかと。
Read the rest of this entry »
互換性レベル 130 以降をサポートしている環境のダウンレベルの互換性レベルと統計情報の更新について
SQL Server の統計情報の更新タイミングというと「データ量の 20% が更新された場合」に自動更新の対象となるというのが一般的に知られている内容ではないでしょうか。
これについては 統計 に記載されています。
SQL Server 2014 (12.x) まで、SQL Server は変更された行の割合に基づくしきい値を使用します。 これには、テーブル内の行数は考慮されません。 しきい値は次のようになります。
- 統計情報が評価された時点でテーブルのカーディナリティが 500 以下の場合、500 回変更されるたびに更新されます。
- 統計情報が評価された時点でテーブルのカーディナリティが 500 よりも大きい場合、500 プラス 20% の数の変更があるたびに更新されます。
SQL Server 2019 CTP 2.4 時代のクエリプロファイリング
SQL Server は製品のバージョンアップや更新プログラムによってクエリ情報を取得するための「クエリプロファイリング」の機能が向上しています。
クエリ プロファイリング インフラストラクチャ というドキュメントで、詳細はまとめられているのですが、自分の言葉で書く機会が少なかったのと、SQL Server 2019 CTP 2.4 でも取得できる情報が増えていますので、この機会にまとめておこうと思います。
Read the rest of this entry »
SQL Server 2019 CTP 2.4 の PolyBase をインストールする際の注意点
SQL Server 2019 CTP 2.4 の PolyBase (2019 の新機能版) をインストールしようとした際の注意点についてまとめておこうかと。
日本語版の Windows Server 2019 + SQL Server 2019 CTP 2.4 の環境を使用していますが、日本語固有 (英語以外) の問題も一部ありそうです。
環境に依存しているかの細かな確認はできていないのですがフィードバックはしておこうかと思います。
Read the rest of this entry »
SQL Server 2019 CTP 2.4 がリリースされました
だいたい月次リリースで SQL Server 2019 の CTP がリリースされているのですが、2.4 がリリースされました。
まさか 3 月に 2 回 CTP がリリースされるとは…。
新機能の詳細はこちら。
データベースエンジン回りと、SSAS に機能向上が行われています。
データベースエンジン
Big Data Cluster
詳細は Release notes for big data clusters on SQL Server の CTP 2.4 の情報から。
- Big Data Cluster の GPU サポート
- Spark で TensorFlow を使用して深層学習を実行するための GPU サポートについてのガイダンスが公開されました。
Deploy a big data cluster with GPU support and run TensorFlow - ガイダンスでは AKS を GPU インスタンスを使用して構築し、そのうえで Big Data Cluster の構築を行っています。
- Big Data Cluster を使用する場合に設定するレポジトリが GPU 向けの設定となっているようです
- 外部データソースの手動作成
- CTP 2.3 までは、DataPool / Storage Pool の外部データソースが作成されていたのですが、CTP 2.4 から作成されなくなったため、手動で作成をする必要があります。
External tables - model に事前に設定しておいてあげると、新規 DB 作成時に反映されて楽かもしれませんね。
- Data Pool に対して INSERT INTO SELECT のサポート
- CTP 2.3 までは、T-SQL を使用して Data Pool に対してデータを投入する際には、「sp_data_pool_table_insert_data」というストアドプロシージャを使用していたのですが、CTP 2.4 からは、ストアドプロシージャが廃止され、INSERT INTO SELECT により、Data Pool に対してデータ収集を行う方法となったようです。
Tutorial: Ingest data into a SQL Server data pool with Transact-SQL - ある程度のまとまった行数を挿入する場合、複数の DB にレコードが分散されていました。
(テスト時は、2700~3800 行ぐらいが分散単位となっていました) - Spark のバージョンが 2.4 にバージョンアップ
- CTP 2.3 までは、Spark は 2.3.x が使用されていたのですが、2.4 が使用されるようになりました。
- 外部テーブルに対して Compute Pool の利用の制御
- 通常、外部テーブルへのアクセスについては、Master Instance から実行されます。
これを Compute Pool 経由でアクセスするように実行するオプションが追加されました - OPTION(DISABLE SCALEOUTEXECUTION)
- OPTION(FORCE SCALEOUTEXECUTION)
データベースエンジン
- 文字列の切り捨てメッセージの動作の変更
- CTP 2.3 までは、文字列長を超えて列に情報を格納する際の切り捨てメッセージの変更は TF 460 が必要でした。
- SQL Server 2016 SP2 CU6 / SQL Server 2017 CU12 でも TF 460 により使用できるようです。
- CTP 2.4 では、互換性レベル 150 では、既定で TF 460 相当の動作が行われるようになっています。
互換性レベル 150 で従来のメッセージに変更する場合は、データベーススコープの構成で、「VERBOSE_TRUNCATION_WARNINGS」により制御できます。
互換性レベル 140 以下の場合は TF 460 で制御を行うようです。
Truncation error message improved to include table and column names, and truncated value (CTP 2.1) - クエリの実行プラン取得方法の機能向上
- どちらも軽量クエリプロファイリングの使用時に、実際の実行計画に相当する情報を取得するための方法となり、軽量クエリプロファイリング v3 の一貫として追加されているようです。
Lightweight query execution statistics profiling infrastructure v3 - 拡張イベント :
query_post_execution_plan_profile の追加 - 軽量プロファイリングに基づいて取得された実行プランを、拡張イベントで収集するためには、このイベントを使用するようです。
- SQL Server 2017 CU14 でも使用できるようです。
DMV : sys.dm_exec_query_plan_stats の追加- 軽量プロファイリングに基づいて最後に実行された実際のクエリ実行プランを調べるための方法のようです。
- 使用するためにはトレースフラグ 2451 が必要となります
透過的データ暗号化 (TDE) の一時停止 / 再開のサポート- TDE を有効にするとき、中断と再開ができるようになりました。
これによりシステム負荷が高い時の TDE によるオーバーヘッドを調整できるようです。
Transparent Data Encryption (TDE) scan – suspend and resume (CTP 2.4)
SSAS
表形式モデルの多対多のリレーションシップのサポート (互換性レベル 1470 が必要)メモリ設定のリソースガバナンス
Big Data Cluster のスケールアウトデータマートへのデータ投入の基本的な考え方
Big Data Cluster (BDC) はスケールアウトデータマートとしてのデータストアを持っています。
CTP 2.3 時点では、スケールアウトデータマートへのデータ投入は標準機能として、T-SQL と Spark ジョブを使用した、2 パターンが用意されています。
- チュートリアル:Transact SQL を使用した SQL Server のデータ プールにデータを取り込む
- チュートリアル:Spark ジョブの SQL Server のデータ プールにデータを取り込む
どちらのパターンでも基本的な操作方法は同じですが、少し特殊な形での利用となっていますので、まとめてみたいと思います。
Read the rest of this entry »
PySpark を使用して Big Data Cluster のストリーミング処理を書いてみる
チュートリアルで提供されているストリーミング処理はは、Scala で記述された「mssql-spark-lib-assembly-1.0.jar」なのですが、PySpark で書くとどうなるだろうと思って勉強がてら書いてみた際の内容です。
Microsoft の公式の技術文書ですと、Big Data Cluster に流用できる内容は、Azure HDInsight / Azure Databricks あたりになりますが、欲しい情報がなく、手探りでいろいろとやっていました。
Microsoft 関連のドキュメントとして、HDInsight Spark クラスターを使用して Azure SQL Database のデータを読み書きする あたりが今回の内容に近いのですが、
注意
現在、Spark から SQL Database へのデータのストリーミングは Scala と Java においてのみサポートされているので、この記事では、Spark (Scala) カーネルを使います。 SQL からの読み取りや SQL への書き込みは Python を使って行うこともできますが、この記事での一貫性を保つため、3 つの操作すべてに Scala を使います
と書かれているように、Scala を使用した例となっています。
Spark の勉強と、Python を使用した場合の情報を探すのに手間取り、書いたアプリケーションの内容の割には、とても時間がかかりました… orz
Read the rest of this entry »
Big Data Cluster のコンテナー情報の取得と整形
Big Data Cluster (BDC) は、k8s 上に複数の Pod を構築することで構成されています。
BDC の管理ポータルからも Pod の情報を取得することはできますが、kubectl 取得することで自分の必要となる情報を取得できるので、JSONPath の操作を覚えがてら、簡単なものを記述してみました。 Read the rest of this entry »