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

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

2
SQL Server 2016と2012の挿入パフォーマンス
同じサーバーに2つのSQL Serverインスタンスがあります。 Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)Standard Edition(64ビット) Microsoft SQL Server 2016(SP1-CU5)(KB4040714)-13.0.4451.0(X64)Enterprise Edition(64ビット) sp_configureの結果は、両方のインスタンスで同じです(新しい2016オプションを除く)。 同じディスクフォルダーの両方のインスタンスに新しいデータベースを作成しました。自動成長パラメータは同じです。 統計の自動作成および自動更新オプションはオフになっています。 次に、10000の挿入をヒープにテストしました。 set nocount on go create table dbo.TestInsert ( i int not null, s varchar(50) not null ) declare @d1 datetime, @d2 datetime, @i int set @d1 = getdate() set @i = 1 while @i …

2
SQL Server 2016の奇妙なパフォーマンス問題
VMware仮想マシンで実行されているSQL Server 2016 SP1の単一インスタンスがあります。異なるアプリケーション用の4つのデータベースが含まれています。これらのアプリケーションはすべて別々の仮想サーバー上にあります。それらのどれもまだ実稼働で使用されていません。ただし、アプリケーションをテストする人々はパフォーマンスの問題を報告しています。 これらはサーバーの統計です: 128 GB RAM(SQL Serverの場合は110 GBの最大メモリ) 4コア@ 4.6 GHz 10 GBitネットワーク接続 すべてのストレージはSSDベースです プログラムファイル、ログファイル、データベースファイル、およびtempdbは、サーバーの別のパーティションにあります asd ユーザーは、C ++ベースのERPアプリケーションを介して単一画面アクセスを実行しています。 ostress多くの小さなクエリまたは大きなクエリを使用してMicrosoftでSQL Serverのストレステストを行うと、最大のパフォーマンスが得られます。彼が十分に速く答えることができないので、スロットリングすることだけがクライアントです。 しかし、ユーザーがほとんどいない場合、SQL Serverはほとんど何もしていません。それでも、アプリケーションに何かを保存するために、人々は永遠に待つ必要があります。 ポールランダルの「どこが痛いのか教えて」クエリによると、すべての待機イベントの50%はASYNC_NETWORK_IOです。 これは、ネットワークの問題、またはアプリケーションサーバーまたはクライアントのパフォーマンスの問題を意味する可能性があります。どちらも、最大容量でリソースをリモートで使用していません。ほとんどの場合、CPUはすべてのマシン(クライアント、appserver、dbサーバー)で約26%です。 ネットワーク接続の遅延は約1〜3ミリ秒です。dbサーバーのIOは、アプリケーションで通常の使用中に最大20MB / sの書き込み速度です(avgは7-9MB / sです)。ストレステストを行うと、最大で約5GB /秒になります。 バッファキャッシュサイズは、ERPシステムのDBで60GB、ファイナンスソフトウェアで20GB、品質保証ソフトウェアで1GB、ドキュメントアーカイブシステムで3GBです。 SQL ServerアカウントにInstant File Initializationを使用する権利を与えました。少しでもパフォーマンスは向上しませんでした。 通常の使用中のページの平均寿命は約15k +です。予想される重いストレステストの終了中に約.05kに低下します。バッチ/秒は、ワークロードに応じて約2〜8kです。 私はERPアプリはひどく書かれていると思いますが、すべてのアプリケーションが影響を受けるのでできません。最小限の作業負荷でも。 しかし、私はこれを引き起こしているものを特定することはできません。ヒント、ヒントチュートリアル、アプリケーション、ベスト/ワーストプラクティスドキュメント、またはこの問題に関して皆さんが心に留めておくものはありますか? これらはからの結果ですsp_BlitzFirst: 600秒実行しました。アプリの負荷が高いときに開始しました。1/3の時間ASYNC_NETWORK_IOです。また、私はとのネットワーク接続をテストしNTttcp、PsPing、ipferf3、とpathping。珍しいことはありません。応答時間は最大3ms、平均0.3msです。スループットは約1000 MB / sです。 私の調査の結果、常にASYNC_NETWORK_IO一番のウェイトスタットになりました。 Large-Receive-OffloadVMware の機能を無効にした結果を調査しました。まだテスト中ですが、結果には一貫性がないようです。最初の 'ベンチマーク'の結果は19分間でした(一番上の結果は、アプリがSQL …

1
拡張イベントに許可されるバインド済みアクションの最大数はいくつですか?
イベントセッションのイベントに「多すぎる」アクションを追加すると、次のエラーが表示されます。 メッセージ25639、レベル16、状態23、行1イベント "[イベント名]"は、許可されたバインドアクションの数を超えています。 許可されるアクションの数 イベントによって異なりますか? 実験に基づく答えは、27のようですsqlserver.rpc_completed。しかし、Microsoftのドキュメントにはその番号がありません。また、イベントごとに異なるようですsqlserver.sql_batch_completed。 失敗するコード例: CREATE EVENT SESSION [Test] ON SERVER ADD EVENT sqlserver.rpc_completed( ACTION( package0.callstack, package0.collect_cpu_cycle_time, package0.collect_current_thread_id, package0.collect_system_time, package0.event_sequence, package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.numa_node_id, sqlos.scheduler_address, sqlos.scheduler_id, sqlos.system_thread_id, sqlos.task_address, sqlos.task_elapsed_quantum, sqlos.task_resource_group_id, sqlos.task_resource_pool_id, sqlos.task_time, sqlos.worker_address, sqlserver.client_app_name, sqlserver.client_connection_id, sqlserver.client_hostname, sqlserver.client_pid, sqlserver.context_info, sqlserver.database_id, sqlserver.database_name, sqlserver.is_system, sqlserver.nt_username, sqlserver.plan_handle)) GO DROP EVENT SESSION [Test] …

1
SQL Server 2016データベースをSQL Server 2017に一時的に移動してから元に戻す。出来ますか?
SQL Server 2016インスタンスからデータベースのバックアップを作成し、2017年のインスタンスに復元して作業を行う場合。 次に、2017年のインスタンスからそのデータベースを反転してバックアップし、それを使用して2016年のインスタンスの元のバージョンを上書きできますか?

2
推定実行計画を表示すると、CXPACKET、PAGELATCH_SH、およびLATCH_EX [ACCESS_METHODS_DATASET_PARENT]の待機が生成されます
にmax degree of parallelism設定し2、にcost threshold for parallelism設定した4 vCPU VMでMicrosoft SQL Server 2016 SP2-CU6(13.0.5292.0)を実行しています50。 朝、SELECT TOP 100クエリの推定実行プランを表示しようとすると、大量の待機が発生し、推定プランをレンダリングする操作に数分、多くの場合5〜7分の範囲で時間がかかります。繰り返しますが、これはクエリの実際の実行ではなく、推定実行プランを表示するプロセスです。 sp_WhoIsActivePAGEIOLATCH_SH待機またはLATCH_EX [ACCESS_METHODS_DATASET_PARENT]待機のいずれかが表示され、操作中にポールランダルのWaitingTasks.sqlスクリプトを実行すると、待機が表示されるCXPACKETワーカースレッドでPAGEIOLATCH_SH待機が表示されます。 *リソースの説明フィールド= exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen ワーカースレッドは、statsテーブル全体をメモリに格納しているように見えます(Paul Randalのクエリから表示されるこれらのページ番号および後続のページ番号は、statsテーブルのクラスタ化キーに戻ります)。プランが戻ってくるstatsと、さまざまなレコードが残っているだけでキャッシュからテーブルの大部分が失われた後でも(同様のクエリからのシーク操作のためにプルされたと仮定します)、基本的に1日の残りの時間は瞬時です。 クエリが実際にSCAN演算子を使用するプランで実行されている場合、この初期動作を期待しますが、上記のリンクされたプランに示されているように、SEEKオペレーターに到達するためだけに実行プランを評価するときにこれを行うのはなぜですか?ここでのパフォーマンスを向上させるために何ができますか(営業時間前にこのステートメントを実行してデータを適切にキャッシュする以外に)。一対のカバリングインデックスが有益であると考えていますが、実際に動作の変更を保証しますか?ここで、ストレージとメンテナンスウィンドウの制限内で作業する必要があります。クエリ自体はベンダーソリューションから生成されるため、この時点で他の提案(より良いインデックス付け以外)を歓迎します。

2
内部結合のカーディナリティ推定問題
行の推定が非常に間違っている理由を理解するのに苦労しています、ここに私の場合があります: 単純な結合-SQL Server 2016 sp2を使用(sp1と同じ問題)、dbcompatiblity = 130。 select Amount_TransactionCurrency_id, CurrencyShareds.id from CurrencyShareds INNER JOIN annexes ON Amount_TransactionCurrency_id = CurrencyShareds.Id option (QUERYTRACEON 3604, QUERYTRACEON 2363); SQLは1行を推定しますが、107131であり、ネストされたループを実行することを選択します(planへのリンク)。CurrencySharedsの統計が更新された後、見積もりは問題なく、マージ結合が選択されます(新しいプランへのリンク)。CurrencySharedsに1つのレコードが追加されるとすぐに、統計が「古く」なり、sqlが誤った推定に戻ります。 この単純なクエリについてはあまり心配しませんが、これは大きなクエリの一部に過ぎず、これはドミノの始まりです... 1つの行を100レコードテーブルに追加すると、このような損傷が発生するのはなぜですか?カーディナリティ推定トレースの出力を調べると、この警告***WARNING: badly-formed histogram ***が表示されますが、このトピックに関する詳細は見つかりませんでした。 ここに、カーディナリティ推定からの完全な出力が出力されます: Begin selectivity computation Input tree: LogOp_Join CStCollBaseTable(ID=1, CARD=107131 TBL: annexes) CStCollBaseTable(ID=2, CARD=100 TBL: CurrencyShareds) ScaOp_Comp x_cmpEq ScaOp_Identifier QCOL: [test.MasterData].[dbo].[CurrencyShareds].Id …

2
DBCC FREEPROCCACHEもDBCC FREESYSTEMCACHE( 'SQL Plans')もCACHESTORE_SQLCPメモリを解放するために何もしません
CACHESTORE_SQLCP SQLプランは、数日後に38 GBを超えます。 「アドホックワークロード用に最適化」オプションをオンにして既に実行しています。(Entity Frameworkとカスタムレポートにより、多くのアドホックが作成されます!) マルチAZミラーリングを使用するAWS RDS上のSQL Server 2016 SE 3.00.2164.0.v1 実行すると: DBCC FREESYSTEMCACHE('SQL Plans'); または DBCC FREEPROCCACHE または DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL または DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL; それをクリアしていないようです: SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb desc type name pages_kb CACHESTORE_SQLCP SQL Plans …

1
メモリ最適化テーブルを使用したSQL Server 2016の不適切な動作
次のSQLクエリをご覧ください。 CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE ( source_col INT NULL, target_col INT not NULL INDEX ix_InMemoryTable NONCLUSTERED (target_col) ) WITH (MEMORY_OPTIMIZED = ON) GO DECLARE @t dbo.IN_MEMORY_TABLE_TYPE INSERT @t ( source_col, target_col ) VALUES (10, 0), (0, 0) UPDATE r1 SET target_col = -1 FROM @t r1 WHERE EXISTS ( …

3
LIKE文字の長さ制限を克服する
ここでこのLIKE文字の長さの制限を読むと、LIKE句で〜4000文字より長いテキストを送信できないように見えます。 特定のクエリのクエリプランキャッシュからクエリプランをフェッチしようとしています。 SELECT * FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st where st.text like '%MY_QUERY_LONGER_THAN_4000_CHARS%' ESCAPE '?' 内のクエリLIKEが4000文字より長い場合、クエリがキャッシュプランに含まれていても結果は0になります。(少なくともエロルが予想されていました)。 この問題を回避する方法はありますか?> 10000charsの長さのクエリがあり、> で検索できないようLIKEです。

2
外部キーの削除に時間がかかるのはなぜですか?
次のように、一度に1つずつ、データベースからすべての外部キーを削除するスクリプトを作成しました。 ALTER TABLE MyTable1 DROP CONSTRAINT FK_MyTable1_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col2 私が驚いたのは、スクリプトに時間がかかることです。DROPFKごとに平均20秒です。今、私はFKを作成することは大したことかもしれないことを理解しています、なぜならサーバーはFK制約が最初から侵害されていないことを確認しなければならないからです?時間がかかるFKをドロップするとき、サーバーは何をしますか?これは私自身の好奇心のためであり、物事をより速くする方法があるかどうかを理解するためです。FKを(単に無効にするだけでなく)削除できると、移行中にはるかに高速になり、したがってダウンタイムを最小限に抑えることができます。

2
SQL Server 2016の空間データ用のMakeValid()の代替
LINESTRINGOracleからSQL Serverに移行する地理データの非常に大きなテーブルがあります。Oracleのこのデータに対して実行される評価は多数あり、SQL Serverのデータに対しても実行する必要があります。 問題:SQL ServerにはLINESTRING、Oracleよりも有効な要件が厳しい。「LineStringインスタンスは、2つ以上の連続したポイントの間隔で自身をオーバーラップさせることはできません」。LINESTRINGsの パーセンテージがその基準を満たしていないということが起こります。つまり、データを評価するために必要な関数が失敗します。データを調整して、SQL Serverで正常に検証できるようにする必要があります。 例えば: LINESTRINGそれ自体に倍増する非常にシンプルな検証: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed() 24413: Not valid because of two overlapping edges in curve (1). MakeValidそれに対して関数を実行する: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).MakeValid().STAsText() LINESTRING (0 -0.999999999999867, 0 0, …

1
SQL Server 2016のSUBSTRING()を含む述語の見積もりの​​変更?
SUBSTRING()または他の文字列関数を含む述語のカーディナリティを推定する方法に関するSQL Server 2016の変更に関するドキュメントまたは調査はありますか? 私が尋ねている理由は、互換モード130でパフォーマンスが低下したクエリを見て、SUBSTRING()の呼び出しを含むWHERE句に一致する行数の推定値の変更に関係した理由です。クエリの書き換えで問題を修正しましたが、SQL Server 2016のこの領域の変更に関するドキュメントを誰かが知っているかどうか疑問に思っています。 デモコードは次のとおりです。このテストケースでは推定値は非常に近いものですが、精度はデータによって異なります。 テストケースでは、compatレベル120ではSQL Serverは推定にヒストグラムを使用しているように見えますが、compatレベル130ではSQL Serverはテーブルの10%が固定されていると仮定しています。 CREATE DATABASE MyStringTestDB; GO USE MyStringTestDB; GO DROP TABLE IF EXISTS dbo.StringTest; CREATE TABLE dbo.StringTest ( [TheString] varchar(15) ); GO INSERT INTO dbo.StringTest VALUES ( 'Y5_CLV' ); INSERT INTO dbo.StringTest VALUES ( 'Y5_EG3' ); INSERT INTO dbo.StringTest VALUES ( 'ZY_NE' …

1
未使用のNONCLUSTERED INDEXでクエリの速度を向上させることはできますか?
これは奇妙な状況ですが、誰かが答えを持っていることを望んでいます。 いくつかのパフォーマンストラブルシューティング中に、NONCLUSTERED INDEXをテーブルに追加しましたsp_BlitzIndex。翌日にその使用状況を確認したところ、読み取り数が0(スキャン/シークが0、シングルトンルックアップが0)であったため、無効にしました。 すぐに、INDEXを追加したときに最初にチェックして解決しようとしていたのと同じアプリの遅さ(パフォーマンスの問題)の苦情を受け取ります。 さて、理論的には、これはまったく偶然のように聞こえます。インデックスは、証明可能、測定可能、使用されていません。無効にしても、クエリのパフォーマンスが低下することはありません。しかし、それはほとんどだTOO偶然。 質問 したがって、私の質問は、単純に十分なものです。 それはすべての可能で、その利用統計情報(のDMVから/非クラスタ化インデックスは、こと、sp_BlitzIndex)まだされており、NOの使用状況を表示しません助けて影響を受けたテーブルの上に何らかの形でクエリのパフォーマンスを?

6
オペレーティングシステムがエラー21を返しました(デバイスの準備ができていません。)
Windowsを再起動するたびに、一部のデータベースで次のエラーが発生します。 オペレーティングシステムがエラー21を返しました(デバイスの準備ができていません。) 私はディスクをチェックしましたchkdsk /r-不良セクターはありません。 DBCC CHECKDBエラーなしで実行しました: *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* SQL Serverを再起動すると、エラーが消えます。 Windows 10およびSQL Server 2016 Express。

1
デッドロック検出のためのSQL拡張イベントセッション
<inputbuf>デッドロック拡張イベントセッションによってキャプチャされたデッドロックXMLの要素のサイズを増やす方法はありますか? アプリケーションコードで問題を特定するのに役立つ完全なクエリが必要です。 1024文字+/-に制限されているようです。増やすことはできますか? サンプルXMLについては、以下を参照してください。<inputbuf>要素のクエリテキストが選択リストの中央で途切れていることがわかります。 <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" isolationlevel="read committed (2)" xactid="255115931225" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="adhoc" …

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