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

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

2
SQL Server 2016では、Always EncryptedとTransparent Data Encryptionの違いは何ですか?
これを書いている間、SQL Server 2016の公式リリースを待っているので、「常に暗号化された」機能の有用性を探ることができます。 Always EncryptedとSQL Server 2016で現在利用可能なTransparent Data Encryptionの具体的な違いを知りたいので、将来のプロジェクトのために正しい判断を下すことができます。

3
SQL Serverの「合計サーバーメモリ」の消費量は数か月間停滞しており、64GB以上が利用可能
SQL Server 2016 Standard Edition 64ビットが、割り当てられた合計メモリの正確に半分(128GBの64GB)で完全に制限されているように見えるという奇妙な問題に遭遇しました。 出力@@VERSIONは次のとおりです。 Microsoft SQL Server 2016(SP1-CU7-GDR)(KB4057119)-13.0.4466.4(X64)2017年12月22日11:25:00 Copyright(c)Microsoft Corporation Standard Edition(64ビット)on Windows Server 2012 R2 Datacenter 6.3(ビルド9600:)(ハイパーバイザー) 出力sys.dm_os_process_memoryは次のとおりです。 クエリを実行するsys.dm_os_performance_countersと、Target Server Memory (KB)がで131072000ありTotal Server Memory (KB)、その半分以下にあることがわかります65308016。ほとんどのシナリオでは、SQL Serverがそれ自体のメモリをさらに割り当てる必要があると判断していないため、これは正常な動作であると理解しています。 ただし、2か月以上にわたって〜64GBで「スタック」しています。この期間中に、一部のデータベースでかなりの量のメモリを消費する操作を実行し、さらに40個近くのデータベースをインスタンスに追加しました。合計292個のデータベースがあり、それぞれに4GBの256 MBの自動成長率の事前割り当て済みデータファイルと、128MBの自動成長率の2GBのログファイルがあります。毎晩12:00 AMにフルバックアップを実行し、月曜日から金曜日の午前6時から午後8時まで、15分間隔でトランザクションログのバックアップを開始します。これらのデータベースは、全体的なスループットが比較的低いですが、SQL Serverが高速化されていないため、何かがおかしいのではないかと疑っています。Target Server Memory 当然、新しいデータベースの追加、通常のクエリの実行、および実行されたメモリ集約型のETLパイプラインを通じて。 SQL Serverインスタンス自体は、12 CPU、144GBのメモリ(SQL Serverに128GB、Windows用に16GBを予約)、および15K SASドライブを備えたvSANの上にある合計4つの仮想ディスクを備えた仮想化(VMware)Windows Server 2012R2サーバーの上にあります。Windowsは、32GBのページファイルがある64GB C:ディスクに自然に配置されます。データファイルは2TBのD:ディスクに、ログファイルは2TBのL:ディスクの上に、tempdbは256GBのT:ディスクに置かれ、8x16GBのファイルは自動拡張されません。 サーバーで実行されているSQL Serverの他のインスタンスが以外にないことを確認しましたMSSQLSERVER。 このサーバーは完全にSQL Serverインスタンス専用であるため、メモリを消費する可能性のある他のアプリケーションやサービスは実行されていません。 分析にはRedGate …

3
SELECTクエリが書き込みを引き起こすのはなぜですか?
SQL Server 2016 SP1 CU6を実行しているサーバーで、拡張イベントセッションに書き込みを引き起こすSELECTクエリが表示されることがあることに気付きました。例えば: 実行計画には、TempDBに流出する可能性のあるハッシュテーブル、スプール、並べ替えなど、書き込みの明白な原因は示されていません。 MAXタイプへの変数の割り当てまたは自動統計更新もこれを引き起こす可能性がありますが、どちらもこの場合の書き込みの原因ではありませんでした。 書き込みは他に何ができますか?

1
以前のバージョンよりもSQL Server 2016を優先する客観的な理由は何ですか?
Microsoftは、SQL Server 2005または2008の日以降、SQL Serverのバージョンアップグレードをより頻繁に行うため、多くの企業は、アップグレードが「必須」であるかどうかを判断するのが難しいと感じています。アップグレードが「必要なもの」である場合 以前のバージョンよりもSQL Serverのさまざまな新しいリリースを好む理由について尋ねるいくつかの以前の質問の精神で、企業が以前のバージョンからSQL Server 2016へのアップグレードを検討する客観的な技術的またはビジネス上の理由は何ですか? SQL Server 2014などのリリース? (この質問 SQL Server 2008の、またはそれに比べてSQL Server 2012の程度、この1 SQL Server 2005に比べてSQL Server 2012の程度それらへの回答ものためにここに理由の一部に拡大し、この質問の精神の例として、気にしています。 SQL Server 2008またはSQL Server 2005で始まる企業)

4
SQL CLRスカラー関数を使用してHASHBYTESをシミュレートするスケーラブルな方法は何ですか?
ETLプロセスの一環として、ステージングからの行をレポートデータベースと比較して、データが最後に読み込まれてから実際に変更された列があるかどうかを確認します。 この比較は、テーブルの一意のキーと、他のすべての列のある種のハッシュに基づいています。現在HASHBYTES、このSHA2_256アルゴリズムで使用しており、多数の並行ワーカースレッドがすべて呼び出している場合、大規模サーバーではスケーリングしないことがわかりましたHASHBYTES。 96コアサーバーでテストする場合、1秒あたりのハッシュで測定されるスループットは、16を超える同時スレッドを増加させません。同時MAXDOP 8クエリの数を1〜12に変更してテストします。テストでMAXDOP 1は、同じスケーラビリティのボトルネックが示されました。 回避策として、SQL CLRソリューションを試したいと思います。要件を述べるための私の試みは次のとおりです。 関数は並列クエリに参加できる必要があります 関数は決定的でなければなりません この関数は、NVARCHARまたはVARBINARY文字列の入力を受け取る必要があります(関連するすべての列は連結されます) 文字列の一般的な入力サイズは、長さが100〜20000文字です。20000は最大値ではありません ハッシュ衝突の可能性は、MD5アルゴリズムとほぼ同等かそれ以上でなければなりません。CHECKSUM衝突が多すぎるため、機能しません。 この機能は、大規模なサーバーで適切にスケーリングする必要があります(スレッド数が増加しても、スレッドあたりのスループットが大幅に低下することはありません) Application Reasons™の場合、レポートテーブルのハッシュの値を保存できないと仮定します。これは、トリガーまたは計算列をサポートしないCCIです(他の問題もありますが、これには入りたくありません)。 HASHBYTESSQL CLR関数を使用してシミュレートするスケーラブルな方法は何ですか?私の目標は、大規模なサーバーでできる限り多くのハッシュを毎秒取得することであると表現できるため、パフォーマンスも重要です。私はCLRがひどいので、これを達成する方法がわかりません。誰かに答える動機があれば、できるだけ早くこの質問に報奨金を追加する予定です。以下は、ユースケースを非常に大まかに示すクエリの例です。 DROP TABLE IF EXISTS #CHANGED_IDS; SELECT stg.ID INTO #CHANGED_IDS FROM ( SELECT ID, CAST( HASHBYTES ('SHA2_256', CAST(FK1 AS NVARCHAR(19)) + CAST(FK2 AS NVARCHAR(19)) + CAST(FK3 AS NVARCHAR(19)) + CAST(FK4 AS NVARCHAR(19)) + CAST(FK5 …

1
クラスター化された列ストアからのこの削除には、熱心なスプール演算子が役立ちますか?
クラスター化された列ストアインデックスからのデータの削除をテストしています。 実行計画に大きな熱心なスプールオペレーターがいることに気付きました。 これは、次の特性で完了します。 6,000万行が削除されました 1.9 GiB TempDBを使用 実行時間14分 シリアルプラン 1スプールで再バインド スキャンの推定コスト:364.821 見積もりツールをだまして過小評価するようにすると、TempDBの使用を回避するより高速なプランが得られます。 推定スキャンコスト:56.901 (これは推定プランですが、コメントの数値は正しいものです。) 興味深いことに、次を実行してデルタストアをフラッシュすると、スプールは再び消えます。 ALTER INDEX IX_Clustered ON Fact.RecordedMetricsDetail REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); スプールは、デルタストアにページのしきい値を超えるしきい値がある場合にのみ導入されるようです。 デルタストアのサイズを確認するには、次のクエリを実行して、テーブルの行内ページを確認します。 SELECT SUM([in_row_used_page_count]) AS in_row_used_pages, SUM(in_row_data_page_count) AS in_row_data_pages FROM sys.[dm_db_partition_stats] as pstats JOIN sys.partitions AS p ON pstats.partition_id = p.partition_id WHERE p.[object_id] = OBJECT_ID('Fact.RecordedMetricsDetail'); …

2
「部分一致インデックス」とは何ですか?
SQL Server 2016で導入された「外部キー参照チェック」クエリプラン演算子について詳しく学習しようとしています。これに関する情報はあまり多くありません。マイクロソフトはここでそれを発表し、私はここでそれについてブログを書きました。new演算子は、254以上の着信外部キー参照を持つ親テーブルから行を削除することで確認できます:dbfiddle link。 オペレーターの詳細には、3つの異なるカウントが表示されます。 外部キー参照カウントは、着信外部キーの数です。 一致するインデックス数は、適切なインデックスのない着信外部キーの数です。更新または削除されたテーブルがその制約に違反しないことを確認するには、子テーブルのスキャンが必要です。 部分一致インデックスカウントが何を表すのかわかりません。 このコンテキストでの部分一致インデックスとは何ですか?次のいずれかを動作させることができませんでした。 フィルター選択されたインデックス 外部キー列をINCLUDEインデックスの列として配置する 2番目のキー列として外部キー列を持つインデックス 複数列の外部キーの単一列インデックス 複数の列の外部キーに対して「インデックス結合」プランを有効にするための複数のカバーインデックスの作成 Dan Guzmanは、インデックスキーの順序が外部キーの列と異なる場合でも、複数の列の外部キーがインデックスと一致する可能性があることを指摘しました。彼のコードは、誰かが部分一致インデックスについてさらに理解するための出発点としてそれを使用できる場合に備えてここにあります。

6
SELECT DISTINCT TOP Nクエリがテーブル全体をスキャンするのはなぜですか?
SELECT DISTINCT TOP NSQL Serverクエリオプティマイザーによる最適化が不十分と思われるいくつかのクエリに遭遇しました。些細な例を考えてみましょう。2つの交互の値を持つ100万行のテーブルです。私が使用しますGetNumsのデータを生成する機能を: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; 次のクエリの場合: SELECT DISTINCT TOP 2 VAL FROM X_2_DISTINCT_VALUES OPTION (MAXDOP 1); …

2
サブクエリが行の推定値を1に減らすのはなぜですか?
次の不自然な単純なクエリを検討してください。 SELECT ID , CASE WHEN ID <> 0 THEN (SELECT TOP 1 ID FROM X_OTHER_TABLE) ELSE (SELECT TOP 1 ID FROM X_OTHER_TABLE_2) END AS ID2 FROM X_HEAP; このクエリの最終的な行の推定値は、X_HEAPテーブル内の行数に等しいと予想されます。サブクエリで何をしていても、行を除外できないため、行の推定値は重要ではありません。ただし、SQL Server 2016では、サブクエリが原因で行の推定値が1に減少しています。 なぜこれが起こるのですか?私はそれについて何ができますか? 適切な構文でこの問題を再現するのは非常に簡単です。これを実行するテーブル定義のセットを次に示します。 CREATE TABLE dbo.X_HEAP (ID INT NOT NULL) CREATE TABLE dbo.X_OTHER_TABLE (ID INT NOT NULL); CREATE TABLE dbo.X_OTHER_TABLE_2 …

4
疑問符の付いた青いアイコン-それはどういう意味ですか?
SQL Serverインスタンスはアクセス可能で、問題ないようです。 Microsoft SQL Server 2016(SP1-CU2)(KB4013106)-13.0.4422.0(X64) 2017年3月6日14:18:16 Copyright(c)Windows Server 2012 R2 Standard 6.3(ビルド9600上のMicrosoft Corporation Enterprise Edition(64ビット) :)(ハイパーバイザー) しかし、白い疑問符はどういう意味ですか? これらのアイコンは、更新しても消えません。私はSQLサーバー内のシステム管理者であり、外部ではそのボックスの管理者です。 私が気づいたもう一つのことは、下の写真で見ることができます。これらは2つの異なるManagement Studioセッションです。 一番上では、自分としてログインしますDBA and sysadmin。2番目では、Management Studio run as a different userを使用して、レプリケーションに使用するドメインアカウントを使用しますが、そうではありませんsysadmin。 2番目blue iconのサーバーにはこのサーバーと他のサーバーもありますが、私のサーバーは通常の緑色のサーバーです。

3
SQL Serverは計画キャッシュと実行統計を定期的にクリアします
SQL Server 2014を2016にアップグレードした後、サーバーはキャッシュされた実行計画やdm*ビュー(などdm_exec_query_stats)を数時間ごとにリセットし続けます 誰かが手動で実行するかのように(誰も実行DBCC FREEPROCCACHEしない場合DBCC DROPCLEANBUFFERSを除き、自動的に実行されます)。 同じまさにデータベースがSQL Server 2014とWindows Server 2012で正常に機能し、SQL Server 2016(およびWindows server 2016)に移行した後、事態は南に進みました 私がチェックしたこと:データベースには「自動クローズ」フラグがありません。SQLサーバーはにad hoc optimized設定されていますtrue(私はそれが役立つと思ったが、そうではなかった)。「クエリストア」は「オフ」です。サーバーには16 GBのメモリがあります。 「SQL Serverログ」でも役に立たないものはありません。毎週のバックアップメッセージ... また、この記事をチェックしましたhttps://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-set-options(下の「例」セクションまでスクロールします。それ)計画が自動的にクリアされる状況のリストがあります。それらのどれも当てはまりません。 更新: 残念ながら、どの提案も役に立たなかった。LPIM権限の付与、同じクエリに対して大量のプランを生成したパラメータ化されていないクエリの検出と修正、「最大サーバーメモリ」の削減...プランは数時間から5〜10分ごとにランダムにリセットされ続けます。サーバーが「メモリ不足」の場合、どうして同じバージョンのマシンでも2014バージョンは正常に機能していました。 要求されたsp_Blitzの出力は次のとおりです。 **Priority 10: Performance**: - Query Store Disabled - The new SQL Server 2016 Query Store feature has not been enabled on this database. * xxx …

1
このクエリでインデックススプールが使用されないのはなぜですか?
オプティマイザーの動作をよりよく理解し、インデックススプールの制限を理解するために、この質問をしています。ヒープに1〜10000の整数を入れると仮定します。 CREATE TABLE X_10000 (ID INT NOT NULL); truncate table X_10000; INSERT INTO X_10000 WITH (TABLOCK) SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM master..spt_values t1 CROSS JOIN master..spt_values t2; そして、ネストされたループ結合を強制しますMAXDOP 1: SELECT * FROM X_10000 a INNER JOIN X_10000 b ON a.ID = b.ID OPTION (LOOP JOIN, …

1
このMERGEステートメントによりセッションが強制終了されるのはなぜですか?
MERGEデータベースに対して発行される以下のステートメントがあります: MERGE "MySchema"."Point" AS t USING ( SELECT "ObjectId", "PointName", z."Id" AS "LocationId", i."Id" AS "Region" FROM @p1 AS d JOIN "MySchema"."Region" AS i ON i."Name" = d."Region" LEFT JOIN "MySchema"."Location" AS z ON z."Name" = d."Location" AND z."Region" = i."Id" ) AS s ON s."ObjectId" = t."ObjectId" WHEN NOT …

3
varchar(255)またはvarchar(256)?
テーブルを使用する必要がありますvarchar(255)かvarchar(256)?列の長さ、またはメタデータの保存に1バイトが使用されていると聞きました。 この時点でそれはもう重要ですか? 私はインターネット上でいくつかの投稿を見ましたが、それらはOracleとMySQLに適用されます。 Microsoft SQL Server 2016 Enterprise Editionがありますが、この環境にどのように適用されますか? ここで、たとえば、テキストの説明を256ではなく255文字に保つようにクライアントに指示した場合、違いはありますか?私が読んだこと「DBMSは255文字の最大長で、フィールド内のデータの長さを示すために単一バイトを使用することを選択できます。制限が256以上の場合、2バイトが必要になります。」これは本当ですか?

1
LIKE N '% %'の検索がUnicode文字に一致し、=N' 'が多くに一致するのはなぜですか?
DECLARE @T TABLE( Col NCHAR(1)); INSERT INTO @T VALUES (N'A'), (N'B'), (N'C'), (N'Ƕ'), (N'Ƿ'), (N'Ǹ'); SELECT * FROM @T WHERE Col LIKE N'%�%' 返品 Col A B C Ƕ Ƿ Ǹ SELECT * FROM @T WHERE Col = N'�' 返品 Col Ƕ Ƿ Ǹ 以下ですべての可能なダブルバイト「文字」を生成=すると、LIKE N'%�%'バージョンがそれらの21,229に一致し、すべてのバージョンに一致することがわかります(同じ結果でいくつかの非バイナリ照合を試しました)。 WITH T(I, N) AS …

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