スキップしてメイン コンテンツに移動

投稿

ラベル(SQL Server)が付いた投稿を表示しています

SQL Serverの互換性レベル100 vs 160:Query Storeの視点から再考する

SQL Serverにおけるデータベースの互換性レベル(Compatibility Level)の変更は、単なる「バージョン互換性」以上の意味を持っています。実際には、クエリの最適化方式、カーディナリティ推定(Cardinality Estimation)、インテリジェントなクエリ処理(Intelligent Query Processing, IQP)機能の有効化にいたるまで、パフォーマンスに直結する重要なアーキテクチャ上の決定です。 特定のクエリが遅くなった際、互換性レベルを下げることで一時的に復旧させることがあります。しかし、これはデータベース全体として最新エンジンが提供する最適化機能を放棄することになります。本記事では、SQL Serverの互換性レベル100と160の違いをQuery Storeの視点から再考し、最適な移行・運用戦略を解説します。 1. 互換性レベル 100 でも Query Store は動作するのか? よくある誤解の一つに、**「100のような古い互換性レベルではQuery Storeを使用できない」**というものがあります。結論から言うと、 これは誤りです。 互換性レベルが100(SQL Server 2008相当)に設定されていても、SQL Server 2016以降のバージョンで動作しているデータベースであれば、Query Storeを有効にして以下のコア機能を活用できます。 パフォーマンスデータの収集 : クエリテキスト、実行計画(Execution Plan)、ランタイム統計(平均実行時間、CPU使用量、論理読み取り数など)の収集。 実行計画の比較 : 互換性レベル変更の前後、または特定期間における実行計画の低下(Regression)の検知。 実行計画の強制(Plan Forcing) : 特定の query_id に対して、過去の最適な plan_id を強制適用し、クエリパフォーマンスの安定性を担保。 そのため、古い互換性レベルで動作しているからといって、強力な監視ツールであるQuery Storeを諦める必要はありません。 2. 100 vs 160:インテリジェントなクエリ処理(IQP)の壁 しかし、単なるパフォーマンスの収集を超えて、 自動的な最適化 の領域に進むと、互換性レベルの...

【sql server】距離が近い順にソートするクエリ(sql)

sql serverにはgeographyというカラムがいつの間にできてます。 これを利用すると特定位置から近い順にデータが読み込めます。 DECLARE @InputLatitude FLOAT = 40 . 7128 ; DECLARE @InputLongitude FLOAT = - 74 . 0060 ; SELECT TOP 50 * FROM YourTableName ORDER BY geographyColumn . STDistance (geography:: Point (@InputLatitude, @InputLongitude, 4326 )) ASC ; もしあなたから近いユーザーのリストが欲しい場合このようにクエリを書けばオッケーです。 しかしフィールドは? create table tUser ( uSn bigint identity( 1 , 1 ), uUid nvarchar( 200 ), uLoc geography, uLocText nvarchar( 200 ) ) このようにテーブルを作りました。位置情報はuLocTextに入れ、uLocにはgeography値を入れます。 declare @uLocText nvarchar( 200 ), @uSn bigint set @uLocText = ' 40.7128, -74.0060 ' set @uSn = 1 UPDATE tUser SET uLoc = geography:: Point (CAST( SUBSTRING (@uLocText, 1 , CHARINDEX( ' , ' , @uLocText) - 1 ) AS FLOAT), CAST( SUBSTRING (@uLocText, CHARINDEX( ' , ' , @uLocText) + 1 , LEN(@uLocText)) AS FLOAT), 4326 ) , uLocText = @uLocText where uSn = @uSnこ このように計算して入れたらuLocにはバイナリーコードのように入って目...

sql server convert datetime

0 select convert(varchar, getdate(), 0) Dec 12 2020 12:38AM 1 select convert(varchar, getdate(), 1) 12/30/20 2 select convert(varchar, getdate(), 2) 20.12.30 3 select convert(varchar, getdate(), 3) 30/12/20 4 select convert(varchar, getdate(), 4) 30.12.20 5 select convert(varchar, getdate(), 5) 30-12-20 6 select convert(varchar, getdate(), 6) 30 Dec 20 7 select convert(varchar, getdate(), 7) Dec 30, 20 9 select convert(varchar, getdate(), 9) Dec 30 2020 12:38:54:840AM 10 select convert(varchar, getdate(), 10) 12-30-20 11 select convert(varchar, getdate(), 11) 20/12/30 12 select convert(varchar, getdate(), 12) 201230 13 select convert(varchar, getdate(), 13) 30 Dec 2020 00:38:54:840AM 20 select convert(varchar, getdate(), 20) 2020-12-30 00:38:54 21 select convert(varchar, getdate(), 21) 2020-12-30 00:38:54.840 22 select convert(varchar, getdate(), 22) 12/30/20 12:38:54 AM 23 select convert(varchar, getdate(), 23) 2020-1...

Apache-Drillを利用してData Scientistになろう!初級編!

何も知らない人のための講座になります。 まずはApache Drillをインストールしましょう。 https://drill.apache.org/ Apache Drillを自分のパソコンにインストールしましょう! 下記のファイルをまずダウンロード! ダウンロード: https://drill.apache.org/download/ JDKが要ります: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html もしUnzipが必要なら: https://www.7-zip.org/download.html インストールマニュアル: https://drill.apache.org/docs/installing-drill-on-windows/ インストール時チェック事項 ・JAVA_HOME設定しました? ・Drill UDFフォルダを作成しました? ・Drill UDFフォルダに権限を与えました? ではダウンロードしたDrillを起動しましょう! 圧縮を解凍するとフォルダができます。 apachi-drill-..... この中にbinフォルダに入ります。 apache-drill-embedded.bat を実行します。 しばらく待ったらプロンプトが出ます。 apache drill> と表示されたらOKです! プロンプトでもSQLの実行ができますが 見やすいWebUIを提供してくれるので ブラウザを立ち上げます。 localhost:8047 に接続すると 何か出ました! Queryをクリックしましょう。 Queryを入力する画面に早速自分のデータを入れてみましょう! UTF-8で保存したCSVファイルを用意しましょう。 今回はtest01.csvと名付けました select  *  from  dfs. `C: \l wwork \t est01.csv`   limit   10 ; と入力して実行!(ctrl + enter) CSVデータがウェブ上に表示されたら成功です! ここでいく...