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

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

3
ジョブが失敗したときにSQL Serverからエラーの詳細を電子メールで受け取るにはどうすればよいですか?
SQL Serverでは、失敗したときに電子メールアラートを送信するようにジョブを構成できます。これは、ジョブを監視するためのシンプルで効果的な方法です。ただし、これらのアラートには詳細は含まれず、成功または失敗の通知のみが含まれます。 ジョブが失敗した場合、これは典型的な警告メールのようになります。 JOB RUN: 'DBA - Consistency Check Databases' was run on 8/14/2011 at 12:00:04 AM DURATION: 0 hours, 0 minutes, 0 seconds STATUS: Failed MESSAGES: The job failed. The Job was invoked by Schedule 2 (Nightly Before Backup 12AM). The last step to run was step 1 (Check …

1
大規模なデータセットを処理するために、SQL Server 2008 R2のシャーディングを設定するためのパターン?
SQL Server 2008 R2で大きなデータセット(> 10億行)を処理したい。「シャーディング」または「水平パーティショニング」を設定すると、テーブルが複数のファイルに分割されるため、大規模なデータセットをすばやく処理できると聞きました。 以前にシャーディングまたは水平分割を使用したことがありますか?もしそうなら、あなたの経験では、単一の巨大なテーブルと比較してより良い結果を達成するパターンを提案できますか?

5
この2000万件のレコードビューをより速くクエリするにはどうすればよいですか?
検索機能では、検索する必要があるすべてのテーブルのレコードを含むビューを使用しています。ビューには、ほぼ2000万件のレコードがあります。このビューに対する検索には時間がかかりすぎています。 このビューのパフォーマンスを改善するためにどこを調べるべきですか? ビューの大まかな定義は次のとおりです。13のテーブルと約30のフィールドが含まれます。 CREATE VIEW [dbo].[v_AllForSearch] AS SELECT FT.firstField AS [firstField] , FT.fld_primary AS [fld_primary] , FT.fld_thirdField AS [thirdField] , FT.fld_fourthField AS [fourthField] , ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField] , ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch , ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch , ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch , ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch] , ISNULL(FRT.[fld_seventhSearch],'') AS [seventhSearch] , ISNULL(FRT.[fld_eightSearch],'')AS [eightSearch] , ISNULL(FIT.[fld_nineSearch],'') …

3
SQL Server-一時テーブルと物理テーブル
私の職場では、#tempテーブルの使用をやめて、代わりにSPIDを含む永続的な物理テーブルを使用する動きが進行中です。以前に#tempテーブルにINSERTしたことがある場合は常に、たとえばストアドプロシージャの先頭にある一連INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)のDELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPIDステートメントと共に、が必要になります。さらに、言うまでもなく、これらの「一時データを保存するための永続テーブル」が使用される場所では、を含めるように注意する必要がありますWHERE SPID = @@SPID。 このプラクティスへの移行の背後にあるロジックは、クエリが実行されているサーバーの全体的なパフォーマンスを向上させることです(tempdbのI / Oと競合を減らすことにより)。私はいくつかの理由でこのアプローチに熱心ではありません-く、潜在的に危険であり、新しいスキームを使用するクエリのパフォーマンスを損なう可能性があるようです。 #tempテーブルを削除するためのこれまたは類似のアプローチの経験はありますか?

5
アタッチ/デタッチ対バックアップ/復元
データベースを(全体として)別のサーバーに転送して、別のテスト環境をセットアップするために複製データベースを作成する必要があります。 次の2つの選択肢があります。 ソースサーバーで完全バックアップを作成/ターゲットサーバーで復元。 移行元サーバーで切断/移行先サーバーで接続。 要件に応じた2つのソリューションの長所と短所は何ですか? SQL Server 2008 Enterpriseを使用しています。

4
RAID1または5の代わりにRAID0これはおかしいですか?
SQL Serverクラスターの1つにRAID0セットアップを使用することを検討しています。私は状況の概要を説明し、これが悪い考えである理由を探しています。また、ユースケース、ホワイトペーパー、または他のドキュメントを持っている人がこのトピックについて私に指摘できるなら、それは素晴らしいことです。 SQLクラスターの一部である2つのデータセンターに3つのサーバーがあります。それらはすべて、可用性グループでSQL Serverを実行しています。プライマリには、すぐ隣にレプリカがあり、もう1つは他のデータセンターにあります。自動フェールオーバーを使用して同期レプリケーションを実行しています。すべてのドライブはエンタープライズクラスのSSDです。SQL Server 2017または2019を実行します。 RAID0アレイで他の方法よりもRAID0アレイ上で実行することには、実際の欠点があったとしてもわずかしかありませんが、複数の利点があると考えています。私が現在見ている唯一のマイナスは、プライマリサーバーの冗長性の欠如です。長所として: 誰かが手動で操作を行うという通知を受け取るまで、速度が低下した状態で実行されるのではなく、ドライブに障害が発生した場合、サーバーはすぐに二次側に障害を起こし、完全な動作能力を維持します。これには、フェールオーバーを通知するという追加の利点があるため、原因をより早く調査できます。 TB容量ごとの全体的な障害の可能性を減らします。パリティドライブまたはミラードライブは必要ないため、アレイあたりのドライブ数を減らします。ドライブが少ないほど、ドライブが故障する可能性が低くなります。 もっと安い。必要な容量に必要なドライブの数が少ないことは明らかにコストがかかりません。 これは従来のビジネス思考ではないことは知っていますが、検討していないことはありますか?私は、賛否両論の入力を歓迎します。 クエリのパフォーマンスを向上させるためにこれをしようとはしていませんが、意味のあるものがあれば、気軽に指摘してください。私の主な関心事は、私が考えていなかった信頼性または冗長性の問題を考慮または対処できないことです。 OSは別のミラードライブ上にあるため、サーバー自体は動作し続ける必要があります。これらのドライブの1つを交換して、再びミラー化できます。それは小さく、システムDB以外のデータベースファイルはありません。数分以上かかるとは想像できません。データアレイの1つに障害が発生した場合、ドライブを交換し、アレイを再構築して、AGと復元および再同期します。私の経験では、復元はRAID5ドライブの再構築よりもはるかに高速です。RAID1で障害が発生したことは一度もないので、その再構築が高速になるかどうかはわかりません。リストアはバックアップから行われ、プライマリと一致するようにロールフォワードされるため、プライマリサーバーの負荷の増加は、回復したレプリカと最後の数分間のログのみを同期する必要があります。

1
ヒストグラム外のカーディナリティー推定
セットアップ カーディナリティの推定値を理解するのに苦労しています。テストのセットアップは次のとおりです。 Stack Overflowデータベースの2010バージョン SQL Server 2017 CU15 + GDR(KB4505225)-14.0.3192.2 新しいCE(互換性レベル140) 私はこのプロシージャを持っています: USE StackOverflow2010; GO CREATE OR ALTER PROCEDURE #sp_PostsByCommentCount @CommentCount int AS BEGIN SELECT * FROM dbo.Posts p WHERE p.CommentCount = @CommentCount OPTION (RECOMPILE); END; GO dbo.Postsテーブルに非クラスター化インデックスまたは統計がありません(にクラスター化インデックスがありますId)。 このための推定プランを要求すると、「推定行」dbo.Postsは1,934.99になります。 EXEC #sp_PostsByCommentCount @CommentCount = 51; 次の統計オブジェクトは、推定プランを要求したときに自動的に作成されました。 DBCC SHOW_STATISTICS('dbo.Posts', [_WA_Sys_00000006_0519C6AF]); そのハイライトは次のとおりです。 統計のサンプルレートは1.81%と非常に低い(67,796 …

1
読み取り可能なセカンダリの強制計画
可用性グループのプライマリでプランが強制される場合、セカンダリで実行されるクエリに適用されますか? 私は計画強制の両方の可能性をカバーする答えを探しています: 計画ガイド クエリストアの強制計画 QS強制プランは引き継がれないことを示唆する次の記事を読みましたが、ドキュメント内で信頼できるもの、またはプランガイドに関するものを見つけることができません。 Erin Stellatoによるクエリストアと可用性グループ Vikas RanaによるAlwaysOn Readable Secondaryでのクエリデータストアの強制プランの動作 強制の決定的な証拠は存在だろうUse Planか、PlanGuideNameとPlanGuideDBの二次実行計画のプロパティ。

1
一意でないインデックスに重複したキー行を挿入できませんか?
8週間エラーがなかった後、過去数日間でこの奇妙なエラーに3回遭遇しましたが、困惑しています。 これはエラーメッセージです。 Executing the query "EXEC dbo.MergeTransactions" failed with the following error: "Cannot insert duplicate key row in object 'sales.Transactions' with unique index 'NCI_Transactions_ClientID_TransactionDate'. The duplicate key value is (1001, 2018-12-14 19:16:29.00, 304050920).". インデックスは一意ではありません。気付いた場合、エラーメッセージ内の重複キー値はインデックスと一致していません。奇妙なことは、プロシージャを再実行すると成功することです。 これは私の問題がある最新のリンクですが、解決策が見つかりません。 https://www.sqlservercentral.com/forums/topic/error-cannot-insert-duplicate-key-row-in-a-non-unique-index 私のシナリオに関するいくつかのこと: procはTransactionID(主キーの一部)を更新しています-これがエラーの原因であると思いますが、理由はわかりませんか?そのロジックを削除します。 テーブルで変更追跡が有効になっています コミットされていないトランザクションの読み取りを行う 各テーブルには45のフィールドがあり、主にインデックスで使用されるものをリストしました。update文のTransactionID(クラスター化キー)を(不必要に)更新しています。奇妙なことに、先週まで何ヶ月も問題がなかった。そして、それはSSISを介して散発的にのみ発生します。 テーブル USE [DB] GO /****** Object: Table [sales].[Transactions] Script …

2
SQL Serverは、システムで生成された制約名に競合を作成できますか?
SQL Server 2008データベース(非クラスター化)に数百万のテーブルを作成するアプリケーションがあります。SQL Server 2014(クラスター化)にアップグレードしようとしていますが、負荷がかかっているときにエラーメッセージが表示されます。 「データベースに「PK__tablenameprefix__179E2ED8F259C33B」という名前のオブジェクトが既に存在します」 これは、システムで生成された制約名です。ランダムに生成された64ビットの数字のように見えます。多数のテーブルが原因で衝突が発生している可能性はありますか?テーブルが1億個あると仮定すると、次のテーブルを追加するときに衝突が発生する可能性は1兆分の1未満ですが、それは均一な分布を前提としています。衝突の可能性を高めるために、SQL Serverがバージョン2008と2014の間で名前生成アルゴリズムを変更した可能性はありますか? もう1つの重要な違いは、2014年のインスタンスがクラスター化されたペアであることですが、上記のエラーが発生する理由の仮説を立てるのに苦労しています。 PSはい、何百万ものテーブルを作成するのは非常識です。これは、私が制御できないブラックボックスのサードパーティコードです。狂気にもかかわらず、バージョン2008では機能しましたが、現在はバージョン2014では機能しません。 編集:詳細な検査では、生成されたサフィックスは常に179E2ED8で始まるようです-つまり、ランダムな部分は実際には32ビットの数字であり、衝突の確率は新しいテーブルが追加されるたびに50分の1です私が見ているエラー率にはるかに近い一致です!

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] …

4
この時点で接続できる管理者は1人だけです(MS SQL Serverエラー18461)
SQL Serverに少量のメモリを与えた場合の効果を実験していましたが、回復すると思っていました。 SQL Serverを起動して200 MBのメモリを使用するように構成しました。インターネットでいくつか検索を行い、SQL Serverをシングルユーザーモードで起動するように勧められました。ただし、エラーが発生します ユーザーAのログインに失敗しました。理由:サーバーはシングルユーザーモードです。この時点で接続できる管理者は1人だけです(Microsoft SQL Server、エラー:18461) SQL Serverエージェントを停止しました。
14 sql-server 

2
統合テスト用のSQL Serverデータベーススナップショット
統合テストのために(SQL Serverの)テストデータベースを操作する方法を定義しようとしています。 私のアイデアは、統合テストアセンブリの起動時に次の手順を実行することでした。 完全に空のデータベースを作成する 「データベースオブジェクトの作成」スクリプトを実行して、関連するすべてのデータベースオブジェクト(テーブル、ビュー、シーケンスなど)を作成します。 「ベースデータ」を入力します(ルックアップ値など) (db)_Basis将来の統合テストのために「ベースライン」と呼ばれるデータベースのスナップショットを撮る すべてのテストクラス(1-nテストを含む)の前に、「スナップショットからの復元」を実行して、データベースの定義済みの多かれ少なかれ「空の」状態に戻すことを計画していました。これまでのところ魅力のように動作します。 ただし、大規模なテストデータベースで動作する必要がある統合テストのセットがあります。そのため、これらの各テストフィクスチャ(n個の個別テストを持つクラス)の前にこれを実行したいと考えていました。 (db)_Basisスナップショットからデータベースを復元する これらの50'000 +行のデータをデータベースに挿入します 別のスナップ(db)_With_Testdataショットスナップショットを作成する その後、テストごとに、データベースを適切に定義された(db)_With_Testdataスナップショットバージョンにリセットし、テストを実行して、結果を検証します。 問題は、2つの dbスナップショットを同時に持つことができないように思われることです。一度行うと、データベースをどちらにも復元できません。このエラーが引き続き発生します。 メッセージ3137、レベル16、状態4、行9 データベースを元に戻すことはできません。プライマリ名またはスナップショット名が不適切に指定されているか、他のすべてのスナップショットが削除されていないか、ファイルが欠落しています。 メッセージ3013、レベル16、状態1、行9 RESTORE DATABASEが異常終了しています。 SQL Serverデータベースのスナップショットは実際にどのように機能しますか?? ひどく制限しているようです.....おそらく元の「(db)_Basis」スナップショットに直接戻れないかどうかはわかりますが、2つのスナップショットを持っているという理由だけで、最新のスナップショットに戻ることさえできません。 ?!?!?

4
SELECT INTOステートメントの進行
ETLフローには長時間実行されるSELECT INTOステートメントがあり、その場でテーブルを作成し、そのテーブルに数億のレコードを取り込みます。 ステートメントは次のようになります SELECT ... INTO DestTable FROM SrcTable 監視のために、実行中にこのステートメントの進行状況(おおよそ行数、書き込まれたバイト数など)の大まかなアイデアを取得したいと思います。 以下を試してみましたが、役に立ちませんでした。 -- Is blocked by the SELECT INTO statement: select count(*) from DestTable with (nolock) -- Returns 0, 0: select rows, rowmodctr from sysindexes with (nolock) where id = object_id('DestTable') -- Returns 0: select rows from sys.partitions where object_id = …

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