SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Archive for the ‘SQL Server’ Category

SQL Server のログイン / ユーザーの権限を SSMS を使用しながら確認してみる

leave a comment

SQL Server の権限設定ですが、基本的な考え方は プリンシパル (データベース エンジン) に記載されている内容となります。

権限としては、次の二種類に分けられます。

  • ログイン : インスタンスレベルでの操作権限
  • ユーザー : データベースレベルでの操作権限

「ログイン」と「ユーザー」という複数のプリンシパルに分かれているため、理解しづらい構成になっているのですが、SSMS を使用しながらであればわかりやすいかなと思いましたので軽くまとめてみようかと。

Read the rest of this entry »

Written by masayuki.ozawa

4月 23rd, 2019 at 11:34 pm

Posted in SQL Server

Tagged with

互換性レベル 130 以降をサポートしている環境のダウンレベルの互換性レベルと統計情報の更新について

leave a comment

SQL Server の統計情報の更新タイミングというと「データ量の 20% が更新された場合」に自動更新の対象となるというのが一般的に知られている内容ではないでしょうか。

これについては 統計 に記載されています。

SQL Server 2014 (12.x) まで、SQL Server は変更された行の割合に基づくしきい値を使用します。 これには、テーブル内の行数は考慮されません。 しきい値は次のようになります。

  • 統計情報が評価された時点でテーブルのカーディナリティが 500 以下の場合、500 回変更されるたびに更新されます。
  • 統計情報が評価された時点でテーブルのカーディナリティが 500 よりも大きい場合、500 プラス 20% の数の変更があるたびに更新されます。

Read the rest of this entry »

Written by masayuki.ozawa

4月 14th, 2019 at 8:52 pm

SQL Server 2019 CTP 2.4 時代のクエリプロファイリング

leave a comment

SQL Server は製品のバージョンアップや更新プログラムによってクエリ情報を取得するための「クエリプロファイリング」の機能が向上しています。

クエリ プロファイリング インフラストラクチャ というドキュメントで、詳細はまとめられているのですが、自分の言葉で書く機会が少なかったのと、SQL Server 2019 CTP 2.4 でも取得できる情報が増えていますので、この機会にまとめておこうと思います。

Read the rest of this entry »

Written by masayuki.ozawa

4月 4th, 2019 at 10:45 pm

Posted in SQL Server

Tagged with ,

SQL Server 2019 CTP 2.4 の PolyBase をインストールする際の注意点

leave a comment

SQL Server 2019 CTP 2.4 の PolyBase (2019 の新機能版) をインストールしようとした際の注意点についてまとめておこうかと。

日本語版の Windows Server 2019 + SQL Server 2019 CTP 2.4 の環境を使用していますが、日本語固有 (英語以外) の問題も一部ありそうです。
環境に依存しているかの細かな確認はできていないのですがフィードバックはしておこうかと思います。

Read the rest of this entry »

Written by masayuki.ozawa

4月 1st, 2019 at 1:12 am

Posted in SQL Server

Tagged with ,

SQL Server 2019 CTP 2.4 がリリースされました

leave a comment

だいたい月次リリースで 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)

データベースエンジン

  • 文字列の切り捨てメッセージの動作の変更
  • クエリの実行プラン取得方法の機能向上
    • どちらも軽量クエリプロファイリングの使用時に、実際の実行計画に相当する情報を取得するための方法となり、軽量クエリプロファイリング v3 の一貫として追加されているようです。
      Lightweight query execution statistics profiling infrastructure v3
    • 拡張イベント : query_post_execution_plan_profile の追加
      • 軽量プロファイリングに基づいて取得された実行プランを、拡張イベントで収集するためには、このイベントを使用するようです。
    • DMV : sys.dm_exec_query_plan_stats の追加
      • 軽量プロファイリングに基づいて最後に実行された実際のクエリ実行プランを調べるための方法のようです。
        • 使用するためにはトレースフラグ 2451 が必要となります
  • 透過的データ暗号化 (TDE) の一時停止 / 再開のサポート

SSAS

  • 表形式モデルの多対多のリレーションシップのサポート (互換性レベル 1470 が必要)
  • メモリ設定のリソースガバナンス

Written by masayuki.ozawa

3月 28th, 2019 at 9:45 am

Posted in SQL Server

Tagged with ,

Big Data Cluster のスケールアウトデータマートへのデータ投入の基本的な考え方

leave a comment

Big Data Cluster (BDC) はスケールアウトデータマートとしてのデータストアを持っています。

CTP 2.3 時点では、スケールアウトデータマートへのデータ投入は標準機能として、T-SQL と Spark ジョブを使用した、2 パターンが用意されています。

  1. チュートリアル:Transact SQL を使用した SQL Server のデータ プールにデータを取り込む
  2. チュートリアル:Spark ジョブの SQL Server のデータ プールにデータを取り込む

どちらのパターンでも基本的な操作方法は同じですが、少し特殊な形での利用となっていますので、まとめてみたいと思います。

Read the rest of this entry »

Written by masayuki.ozawa

3月 21st, 2019 at 10:39 pm

PySpark を使用して Big Data Cluster のストリーミング処理を書いてみる

leave a comment

チュートリアルで提供されているストリーミング処理はは、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 »

Written by masayuki.ozawa

3月 21st, 2019 at 11:22 am

Big Data Cluster のコンテナー情報の取得と整形

leave a comment

Big Data Cluster (BDC) は、k8s 上に複数の Pod を構築することで構成されています。
BDC の管理ポータルからも Pod の情報を取得することはできますが、kubectl 取得することで自分の必要となる情報を取得できるので、JSONPath の操作を覚えがてら、簡単なものを記述してみました。 Read the rest of this entry »

Written by masayuki.ozawa

3月 14th, 2019 at 9:52 am

SQL Server の OPTION(RECOMPILE)による実行プランの変化について

leave a comment

SQL Server では、「OPTION (RECOMPILE)」のクエリヒントを使用することで、明示的に SQL ステートメントをリコンパイルすることができます。

パラメータースニフィングにより、パラメーターを使用したクエリで、実行タイミングによって大きく件数が変わる場合などに、コンパイルによる再利用効率とのトレードオフを考慮してクエリヒントをケースが多いと思いますが、それ以外でも RECOMPILE のヒントによって動作が変更されるケースがあります。

RECOMPILE の説明には次のような記載があります。

RECOMPILE
SQL Server データベース エンジン に、クエリの新しい一時的なプランを生成し、クエリ実行完了直後にそのプランを破棄するよう指示します。 生成されたクエリ プランは、RECOMPILE ヒントを指定しないで同じクエリを実行したときにキャッシュに格納されるプランを置き換えません。 RECOMPILE を指定しない場合、データベース エンジンはクエリ プランをキャッシュして再利用します。 クエリ プランをコンパイルする場合、RECOMPILE クエリ ヒントは、クエリ内のローカル変数の現在値を使用します。 クエリがストアド プロシージャ内にある場合は、任意のパラメーターに渡された現在値を使用します。

ポイントとなるのが「クエリ プランをコンパイルする場合、RECOMPILE クエリ ヒントは、クエリ内のローカル変数の現在値を使用します。 クエリがストアド プロシージャ内にある場合は、任意のパラメーターに渡された現在値を使用します。」の個所ですね。

この辺の動作をすっかり忘れていて、処理時間に大きく影響が出たクエリを作ってしまったので、実際のクエリをベースに確認していきます。

Read the rest of this entry »

Written by masayuki.ozawa

3月 9th, 2019 at 6:25 pm

Posted in SQL Server

Tagged with

SQL Server 2017 (Windows / Linux) の Unicode テキストの BULK INSERT / bcp での取り込みについて

leave a comment

SQL Server では、BULK INSERT ステートメント / bcp ユーティリティ 等を使用してテキストを取り込むことができます。

SQL Server 2017 の on Windows / on Linux 両方で、これらの方法を使用することができるのですが、使用する OS によって多少動作の違いが出てきます。

これらの動作について確認する機会がありましたのでまとめておきたいと思います。

最初にざっくりとした結果を書いておきますと、

  • SQL Server 2017 on Linux の BULK INSERT については、UTF-8 の取り込みができず、UTF-16 BOM あり (UTF-16 BE / UTF-16 LE) であれば可能であった
  • bcp については、Windows / Linux ともに、UTF-8 / UTF-16 LE / UTF-16 BE / UTF-16LE を取り込むことができた

Read the rest of this entry »

Written by masayuki.ozawa

3月 9th, 2019 at 2:48 pm

Posted in SQL Server

Tagged with ,