タグ付けされた質問 「sql-server-2016」

SQL Server 2016(メジャービルドバージョン13.00.xxxx)。sql-serverにもタグを付けてください。

3
並列性を妨げない方法でユーザー定義のスカラー関数をエミュレートします
クエリに特定のプランを使用するようにSQL Serverをだます方法があるかどうかを確認しようとしています。 1.環境 異なるプロセス間で共有されるデータがあるとします。したがって、多くのスペースをとるいくつかの実験結果があるとします。その後、各プロセスについて、使用する実験結果の年/月を特定します。 if object_id('dbo.SharedData') is not null drop table SharedData create table dbo.SharedData ( experiment_year int, experiment_month int, rn int, calculated_number int, primary key (experiment_year, experiment_month, rn) ) go これで、すべてのプロセスについて、テーブルにパラメーターが保存されました if object_id('dbo.Params') is not null drop table dbo.Params create table dbo.Params ( session_id int, experiment_year int, experiment_month int, …

2
このクエリをリファクタリングして、並列に実行できますか?
サーバーで実行するのに約3時間かかるクエリがありますが、並列処理を利用していません。(で約115万レコード、dbo.Deidentifiedで300レコードdbo.NamesMultiWord)。サーバーは8つのコアにアクセスできます。 UPDATE dbo.Deidentified WITH (TABLOCK) SET IndexedXml = dbo.ReplaceMultiWord(IndexedXml), DE461 = dbo.ReplaceMultiWord(DE461), DE87 = dbo.ReplaceMultiWord(DE87), DE15 = dbo.ReplaceMultiWord(DE15) WHERE InProcess = 1; そしてReplaceMultiword、次のように定義された手順です。 SELECT @body = REPLACE(@body,Names,Replacement) FROM dbo.NamesMultiWord ORDER BY [WordLength] DESC RETURN @body --NVARCHAR(MAX) ReplaceMultiword並行計画の形成を防ぐことへの呼びかけはありますか?これを書き換えて並列処理を可能にする方法はありますか? ReplaceMultiword 置換の一部は他の置換の短いバージョンであり、最長一致が成功するようにするため、降順で実行されます。 たとえば、「ジョージワシントン大学」と「ワシントン大学」の他の大学があります。「ワシントン大学」の試合が最初であれば、「ジョージ」は取り残されます。 技術的にはCLRを使用できますが、その方法はよくわかりません。

2
一括挿入の制約のない委任を構成する
Always On可用性グループにMicrosoft SQL Server 2016ノードのペアがあります。BULK INSERTWindows Server 2016ファイルサーバーフェールオーバークラスターにあるファイルに対して(SQL Server 2016 Management Studioクエリを使用して)実行しようとしていますが、次のエラーが表示されます。 メッセージ4861、レベル16、状態1 ファイル "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt"を開けなかったため、一括読み込みできません。オペレーティングシステムエラーコード5(アクセスが拒否されました)。 これは、アクティブノード名(nas2.my.domain)またはフェールオーバークラスターリスナー(nas.my.domain)を使用するかどうかに関係なく発生します。 調べてみると、これは、SQL Serverが、ニュアンスが原因で接続しているユーザーアカウントを偽装できないことが原因であることがわかりましたBULK INSERT。 Windows認証を使用してSQL Serverに接続する場合、SQL Serverサービスアカウントは、ファイルサーバーへの接続時にユーザーアカウントを偽装しようとします。SQL Server認証を使用して接続する場合、SQL Serverサービスアカウントとしてファイルサーバーに接続します。 委任と偽装が適切に構成されていない場合(既定の状態)、SQL Serverサービスはユーザーアカウントを偽装できず、匿名ユーザーとしてファイルサーバーに接続しようとします。 これは、ファイルサーバーのセキュリティイベントログを調べることで確認できます。これらの事実は、制約なしおよび制約付き委任の構成に関するガイドとともに、次のリンクに記載されています。 方法:制約付き委任を使用したSQL Server一括挿入(アクセスが拒否されました) 一括挿入とKerberos 私はsqldudeのガイドの指示に従ってみましたが、まだ機能していません。 私が行おうとしBULK INSERTているデータベースは可用性グループの一部ではないため、MSSQL1ノードのみが関連するはずです。ファイルサーバーはNAS2ノードでアクティブでした。ファイルサーバーのイベントログを確認すると、この問題が引き続き発生しており、SQL Serverがユーザーアカウントを偽装するのではなく匿名ユーザーとしてファイルサーバーに認証しようとしていることがわかります。 誰が何が間違っているのか知っていますか?または、これらのガイドを廃止するためにSQL Server 2016で何かが変更された場合はどうなりますか? ファイルサーバーセキュリティイベントログエントリ サービスアカウントの委任 サービスアカウントSPN SQL …

1
クエリストアの強制計画機能が機能しない
クエリストアフォースプラン機能がプランを適用していないようです。 クエリストアを知っています-強制は常に強制を意味するわけではありません。ただし、私の計画はさほど変わらない場合がありますが、クエリオプティマイザーは引き続き不適切なインデックスやループの選択などを選択する可能性があります。 基本的に:それは私の強制的な計画の選択を尊重しません。私は多くの計画を強制しましたが、それはうまくいきません。 私が見たとき、0の失敗数または理由がありますsys.query_store_plan force_failure_count。 拡張イベントquery_store_plan_forcing_failedは何も生成しません。0イベント。 たとえば、20.09に強制された計画。たまたま強制計画を使用したコンパイルは1つだけです。 計画は大きく異なります。1つはINDEX 1でハッシュ一致結合を使用し、もう1つはINDEX 2でループ結合を使用します。 バージョン:Microsoft SQL Server 2016(SP1-GDR)(KB3210089)-13.0.4202.2(X64) ここで何が欠けていますか?

3
テーブルの作成中にデフォルトの制約を追加するにはどうすればよいですか?SQL Server [終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 3年前休業。 以下に示すように、列の後に制約が続く新しいテーブルを作成しようとしています。 Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) ただし、デフォルトの制約に近いエラーメッセージが表示されます。 「for」の近くに不正な構文

1
バッチモードのウィンドウ集計で算術オーバーフローが発生するのはなぜですか?
次のクエリは、SUM列ストアテーブルに対してウィンドウ処理を実行します1500 total rows。それぞれの値は0または1であり、INTデータ型をオーバーフローします。なんでこんなことが起こっているの? SELECT a, p, s, v, m, n, SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition FROM ( SELECT a, p, s, v, m, n, RANK() OVER (PARTITION BY v, s, a, p ORDER BY …

1
NOLOCKで変数割り当てを使用したスキャンが遅くなるのはなぜですか?
現在の環境でNOLOCKと戦っています。私が聞いた1つの議論は、ロックのオーバーヘッドがクエリの速度を低下させるというものです。そこで、このオーバーヘッドがどれだけあるかを確認するためのテストを考案しました。 NOLOCKが実際にスキャン速度を低下させることを発見しました。 最初は嬉しかったのですが、今は混乱しています。私のテストはどういうわけか無効ですか?NOLOCKは実際にはわずかに高速なスキャンを許可すべきではありませんか?ここで何が起こっているのですか? これが私のスクリプトです: USE TestDB GO --Create a five-million row table DROP TABLE IF EXISTS dbo.JustAnotherTable GO CREATE TABLE dbo.JustAnotherTable ( ID INT IDENTITY PRIMARY KEY, notID CHAR(5) NOT NULL ) INSERT dbo.JustAnotherTable SELECT TOP 5000000 'datas' FROM sys.all_objects a1 CROSS JOIN sys.all_objects a2 CROSS JOIN sys.all_objects a3 /********************************************/ …

4
SQL Serverが単純なバイジェクションでインデックスを使用できない
これは別のクエリオプティマイザーの難問です。 たぶん私はクエリオプティマイザーを過大評価しているのかもしれませんし、何か不足しているかもしれません。 シンプルなテーブルがあります CREATE TABLE [dbo].[MyEntities]( [Id] [uniqueidentifier] NOT NULL, [Number] [int] NOT NULL, CONSTRAINT [PK_dbo.MyEntities] PRIMARY KEY CLUSTERED ([Id]) ) CREATE NONCLUSTERED INDEX [IX_Number] ON [dbo].[MyEntities] ([Number]) インデックスとそこに数千行あり、Number値0、1、2に均等に分散されています。 今、このクエリ: SELECT * FROM (SELECT [Extent1].[Number] AS [Number], CASE WHEN (0 = [Extent1].[Number]) THEN 'one' WHEN (1 = [Extent1].[Number]) THEN 'two' …

1
グローバルレベルの一時テーブルでは論理読み取り、セッションレベルの一時テーブルでは読み取り不可
次の単純なMCVEについて考えてみます。 SET STATISTICS IO, TIME OFF; USE tempdb; IF OBJECT_ID(N'tempdb..#t1', N'U') IS NOT NULL DROP TABLE #t1; CREATE TABLE #t1 ( r int NOT NULL ); IF OBJECT_ID(N'tempdb..##t1', N'U') IS NOT NULL DROP TABLE ##t1; CREATE TABLE ##t1 ( r int NOT NULL ); IF OBJECT_ID(N'dbo.s1', N'U') IS NOT NULL …

1
結合とウィンドウ関数を使用してリード値とラグ値を取得するパフォーマンスの比較
私は20Mの行のテーブルを有し、各行は3つの列を有している:time、id、およびvalue。それぞれについてidとtime、そこにあるvalue状態のため。time特定の特定の特定のリードとラグの値を知りたいid。 これを達成するために2つの方法を使用しました。1つの方法は結合を使用し、もう1つの方法は、クラスター化インデックスがオンtimeおよびのウィンドウ関数lead / lagを使用することidです。 これら2つの方法のパフォーマンスを実行時間で比較しました。結合メソッドは16.3秒かかり、ウィンドウ関数メソッドは20秒かかります(インデックスの作成時間は含まれません)。結合メソッドがブルートフォースであるときにウィンドウ関数が進んでいるように見えるので、これは私を驚かせました。 2つのメソッドのコードは次のとおりです。 インデックスを作成 create clustered index id_time on tab1 (id,time) 結合方法 select a1.id,a1.time a1.value as value, b1.value as value_lag, c1.value as value_lead into tab2 from tab1 a1 left join tab1 b1 on a1.id = b1.id and a1.time-1= b1.time left join tab1 c1 on a1.id = c1.id …

1
システム正常性拡張イベントからの誤ったプロセス使用率?
私は最近、システムヘルス拡張イベントイベントファイルに格納されているデータまたはメトリックの理解に取り組んでいます。 ここで提供されているように、システムヘルスを使用してパフォーマンスメトリックのデータコレクションを実装しようとしています という名前のシステムヘルスイベントから収集されるCPU使用率、その他のプロセス使用率などのメトリックを提供するレポートがあります。 scheduler_monitor_system_health_ring_buffer_recorded SQL CPU使用率としてレポートにリストされているフィールド "process_utilization"がほとんどの場合100を超える時間である理由をいくつかのビジーサーバーで理解できません。サーバーアクティビティモニターから確認した場合でも、常に100を超えるCPUが表示されます。 私はGithubでこの問題を提起しましたが、修正または応答がないようです。 したがって、私の質問は 記録されたシステムヘルスリングバッファーを使用して、サーバーのSQL CPU使用率の正確な数値を取得するにはどうすればよいですか? レポートには、レポートごとに計算された2つ未満のフィールドのカウンターも表示されます OtherProcessUtilとしての100-System_idle-process_utilization SystemUtilとしての100-system_idle これらのOtherProcessUtilおよびSystemUtilは何のために必要/役立ちますか? また、毎回メモリ使用率が常に100と表示されています。これも正しくないようです。誰か気づいたことがありますか? Idera&sentry [私がテストしたもの]のような他のツールでは、同じサーバーのCPU使用率が100%を超えていません。同じ負荷に対して並べて比較しました。

1
SHRINKFILEの失敗-ファイルサイズを大きくすると解決するのはなぜですか?
SHRINKFILEファイルグループ内の小さな不要なファイルをクリーンアップするために、いくつかの操作を実行しています。縮小の1つについて、以下のコマンドはエラーになります。 DBCC SHRINKFILE (N'myfile' , EMPTYFILE)' データベースID xのファイルID xは、別のプロセスによって縮小されているか、空であるため縮小できません 空ではなく、縮んでもいない。現在私以外の誰も使用していないデータベースで実行されています。自動縮小は有効になっておらず、一度も有効になりませんでした。ただし、それが問題になる場合は、私が手に入れる前に、このデータベースで定期的に手動で縮小が行われていました。 でSQLServerCentral、十年前からのスレッドがあることがあるため、ファイルに数MBを追加提案し、「それは今シュリンクの途中ではありません、それを伝える内部カウンタまたはスイッチをリセットします。」 これはうまくいった-素晴らしい。しかし、SQL Serverの内部に関してこれがどのように/なぜ機能するのか、誰でも詳細に説明できますか?

1
EXCEPT演算子の背後にあるアルゴリズムは何ですか?
SQL Serverのカバーの下でExcept演算子がどのように機能するかの内部アルゴリズムは何ですか?内部的に各行のハッシュを取得して比較しますか? David Lozinksiは、SQLの調査を実行しました。新しいレコードが存在しない場合に、新しいレコードを挿入する最も速い方法です。以下の結果に密接に関連しています。 前提:1つの列のみを比較するため、左結合が最も高速になると思いますが、すべての列を比較する必要があるため、例外として最も時間がかかります。 これらの結果により、今、私たちの考えは、自動的かつ内部的に各行のハッシュを取ることを除いてですか?私は実行計画を除いて見て、それはいくつかのハッシュを利用しています。 背景:私たちのチームは2つのヒープテーブルを比較していました。テーブルAテーブルBにない行がテーブルBに挿入されました。 (レガシーテキストファイルシステムの)ヒープテーブルには、主キー/ GUID /識別子はありません。一部のテーブルには重複行があったため、各行のハッシュを見つけ、重複を削除して、主キー識別子を作成しました。 1)最初に、(ハッシュ列)を除いて、exceptステートメントを実行しました select * from TableA Except Select * from TableB, 2)次に、HashRowIdの2つのテーブル間で左結合比較を実行しました select * FROM dbo.TableA A left join dbo.TableB B on A.RowHash = B.RowHash where B.Hash is null 驚いたことに、Except Statement Insertが最速でした。 結果は実際にDavid Lozinksiのテスト結果に近いマップ

2
クエリストア検索を終了しない
最初から私の質問/問題はこの前のものと似ていると言いますが、原因または開始情報が同じであるかどうかわからないため、質問をいくつか詳細に投稿することにしました。 手元の問題: 奇妙な時間(営業日の終わり近く)に、本番インスタンスの動作が不安定になります。 インスタンスのCPU使用率が高い(ベースラインが約30%の場合、約2倍になり、まだ増加し続けていた) 1秒あたりのトランザクション数の増加(ただし、アプリの負荷には変化が見られません) アイドルセッションの数の増加 この動作を表示しなかったセッション間の奇妙なブロッキングイベント(コミットされていない読み取りセッションでもブロッキングが発生していました) 間隔の上位の待機は1位で非ページラッチで、ロックは2位でした。 初期調査: sp_whoIsActiveを使用して、監視ツールによって実行されたクエリが非常に低速で実行され、大量のCPUを取得することを決定したことがわかりました。 その分離レベルはコミットされずに読み取られました。 奇妙な数字が見られた計画を調べました。StatementEstRows= "3.86846e + 010"で、約150 TBの推定データが返されます。 監視ツールのクエリモニター機能が原因であると考えたため、この機能を無効にしました(プロバイダーにチケットを開いて、問題が発生しているかどうかを確認しました) その最初のイベントから、それはさらに数回起こりました。セッションを終了するたびに、すべてが通常に戻ります。 クエリがクエリストアの監視のためにBOLでMSによって使用されるクエリの1つに非常に類似していることがわかります-パフォーマンスが最近低下したクエリ(異なる時点での比較) 同じクエリを手動で実行し、同じ動作を確認します(使用されるCPUが増え続ける、ラッチ待機が増える、予期しないロックなど)。 有罪の質問: Select qt.query_sql_text, q.query_id, qt.query_text_id, rs1.runtime_stats_id AS runtime_stats_id_1, interval_1 = DateAdd(minute, -(DateDiff(minute, getdate(), getutcdate())), rsi1.start_time), p1.plan_id AS plan_1, rs1.avg_duration AS avg_duration_1, rs2.avg_duration AS avg_duration_2, p2.plan_id AS plan_2, interval_2 = DateAdd(minute, …

2
バッチごとにコンパイルが発生します
T-SQLステートメントをバッチで送信するサードパーティアプリケーションがあります。 データベースは、SQL Server 2016 Enterprise SP1 CU7、16コア、256 GBメモリでホストされています。アドホックの最適化が有効になっています。 これは、実行されているクエリのダミーの例です。 exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, loop join)', N'@1 nvarchar(6)',@1=N'test' データベースを監視し、毎秒のバッチ数と毎秒のコンパイル数を見ると、それらは常に同じであることがわかります。負荷が高い場合、これは1000バッチ/秒および1000コンパイル/秒になる可能性があります。平均負荷では、150バッチ/秒です。 最近コンパイルされたプランのクエリキャッシュを分析します。 SELECT …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.