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

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

2
XMLリーダーを使用した計画の最適化
ここからクエリを実行して、デフォルトの拡張イベントセッションからデッドロックイベントを引き出します。 SELECT CAST ( REPLACE ( REPLACE ( XEventData.XEvent.value ('(data/value)[1]', 'varchar(max)'), '<victim-list>', '<deadlock><victim-list>'), '<process-list>', '</victim-list><process-list>') AS XML) AS DeadlockGraph FROM (SELECT CAST (target_data AS XML) AS TargetData FROM sys.dm_xe_session_targets st JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address WHERE [name] = 'system_health') AS Data CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent) …

4
LocalDB v14はmdfファイルの間違ったパスを作成します
最近、SQL Server Expressインストーラーとこの手順を使用して、LocalDBをバージョン13から14にアップグレードしました。インストール後、バージョン13の既存のデフォルトインスタンス(MSSQLLOCALDB)を停止し、v14.0.1000サーバーエンジンを自動的に使用する新しいインスタンスを作成しました。 データベース統合テストによくLocalDBを使用します。つまり、xunitテストでは、テストが終了すると削除される(一時的な)データベースを作成します。新しいバージョン以降、残念ながら次のエラーメッセージが原因ですべてのテストが失敗します。 物理ファイル 'C:\ Users \ kepflDBd0811493e18b46febf980ffb8029482a.mdf'を開くまたは作成しようとしたときに、CREATE FILEでオペレーティングシステムエラー5(アクセスが拒否されました)が発生しました。 奇妙なことは、mdfファイルのターゲットパスが正しくないことです。C:\ Users \ kepflとDBd0811493e18b46febf980ffb8029482a.mdf(単一のテストのランダムなデータベース名)の間にバックスラッシュがありません。データベースは単純なコマンドで作成されますCREATE DATABASE [databaseName]-ここでは特別なことは何もありません。 SSMSでは、データ、ログ、およびバックアップのターゲットの場所は次のとおりです。 ただし、場所を更新しようとすると、別のエラーメッセージが表示されます。 LocalDBがデータベースを再度作成できるように、デフォルトの場所を更新するにはどうすればよいですか?LocalDBがデフォルトのロケーションディレクトリとデータベースファイル名を正しく結合していないことは明らかです。編集できるレジストリエントリはありますか?または他に何か? Dougの回答とsepupicのコメントの後の更新 このStackoverflowの質問によると、デフォルトの場所もレジストリ経由で変更可能である必要があります。ただし、対応するキー「DefaultData」、「DefaultLog」、および「BackupDirectory」を見つけようとすると、レジストリでそれらを見つけることができません。SQL Server v14はこれらのレジストリキーの名前を変更しましたか、またはこれらの情報をレジストリから移動しましたか?

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


4
より多くのCPUとRAMを割り当てた後のSQL Serverパフォーマンスの低下
仮想Windows 2008 R2サーバーで実行されているSQL Server 2008 R2(10.50.1600)があります。CPUを1コアから4に、RAMを4 GBから10 GBにアップグレードした後、パフォーマンスが低下していることに気付きました。 私が見るいくつかの観察: 実行に5秒未満かかったクエリは、現在200秒以上かかっています。 CPUは、sqlservr.exeを原因として100に固定されています。 4.6百万行のテーブルでのselect count(*)は90秒以上かかりました。 サーバーで実行されているプロセスは変更されていません。唯一の変更点は、CPUとRAMを増やすことでした。 他のSQLサーバーには静的なページングファイルがあり、このサーバーはそれを独自に管理するように設定されています。 以前にこの問題に遭遇した人はいますか? sp_BlitzErikごとに、私は走りました EXEC dbo.sp_BlitzFirst @SinceStartup = 1; これらの結果を与えてくれます。

2
ISO WeekとSQL Server Week
さて、今週と先週の比較を行うレポートがありますが、お客様はデータが「ファンキー」であることに気付きました。さらに調査した結果、ISO規格に従って数週間は正しく動作していませんでした。このスクリプトをテストケースとして実行しました。 SET DATEFIRST 1 SELECT DATEPART(WEEK, '3/26/13') , DATEPART(WEEK, '3/27/12') , DATEPART(WEEK, '3/20/12') , DATEPART(WEEK, '1/2/12') SELECT DATEPART(ISO_WEEK, '3/26/13') , DATEPART(ISO_WEEK, '3/27/12') , DATEPART(ISO_WEEK, '3/20/12') , DATEPART(ISO_WEEK, '1/2/12') 実行すると、これらの結果が得られました。 これは奇妙だと思ったので、さらに掘り下げてみると、SQL Serverは1月1日を年の最初の週としてカウントし、ISOは1月の最初の日曜日を年の最初の週としてカウントします。 質問は最終的に2倍になります。質問1これはなぜですか?質問2これを変更する方法はあるので、ISO_Weekどこでも使用するためにすべてのコードを変更する必要はありませんか?

1
BACKUPコマンドのBUFFERCOUNT、BLOCKSIZE、およびMAXTRANSFERSIZEの設定
私を探しています実用的に値を設定するためのガイダンスBUFFERCOUNT、BLOCKSIZEおよび、MAXTRANSFERSIZEのBACKUPコマンド。私は少し調査を行い(以下を参照)、少しテストを行いました。本当に価値のある答えは「まあ、それは...」で始まることを十分に認識しています。私が行ったテストと私が見つけたリソースのいずれかに示されているテスト(以下の方法を参照)に対する私の懸念は、テストが真空で行われることです。ほとんどの場合、他の負荷のないシステムで行われます。 長期的な経験に基づいたこれらの3つのオプションに関する適切なガイダンス/ベストプラクティスに興味があります:数週間または数か月にわたる多くのデータポイント。そして、特定の値を探しているわけではありません。それはほとんどが利用可能なハードウェアの機能だからです さまざまなハードウェア/負荷要因が、実行すべき内容にどのように影響するか。 これらの値がどれもオーバーライドされるべきではない状況はありますか? すぐに明らかではないこれらのいずれかをオーバーライドするための落とし穴はありますか?メモリーやディスクI / Oを使いすぎていますか?復元操作を複雑にしますか? SQL Serverの複数のインスタンス(既定のインスタンスと2つの名前付きインスタンス)を実行しているサーバーがあり、3つのインスタンスすべてのバックアップを同時に実行すると、集合(BUFFERCOUNT* MAXTRANSFERSIZE)使用可能なRAMを超えていませんか?可能なI / O競合? 1つのサーバーで3つのインスタンスを使用し、3つすべてのバックアップを同時に同時に実行する同じシナリオで、各インスタンス内で複数のデータベースのバックアップを同時に実行すると、これらの値の設定にどのように影響しますか?つまり、3つのインスタンスのそれぞれに100個のデータベースがあり、各インスタンスごとに2つまたは3つのバックアップを同時に実行し、6から9のバックアップが同時に実行される場合。(この状況では、いくつかの大きなデータベースではなく、多くの中小規模のデータベースがあります。) これまでに収集したもの: BLOCKSIZE: サポートされるサイズは、512、1024、2048、4096、8192、16384、32768、および65536(64 KB)バイトです。[1] デフォルトは、テープデバイスの場合は65536、それ以外の場合は512です[1] CD-ROMへのコピーおよびCD-ROMからの復元を計画しているバックアップを作成する場合は、BLOCKSIZE = 2048 [1]を指定します 単一のディスクに書き込む場合、デフォルトの512で十分です。RAIDアレイまたはSANを使用する場合は、デフォルトまたは65536のどちらが優れているかをテストする必要があります。[13(18ページ)] 手動で設定する場合、値はデータファイルの作成に使用されるブロックサイズ以上でなければなりません。そうでない場合、次のエラーが表示されます。 メッセージ3272、レベル16、状態0、行3 'C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ Backup \ BackupTest.bak'デバイスのハードウェアセクターサイズは4096ですが、ブロックサイズパラメーターは互換性のない512のオーバーライド値。互換性のあるブロックサイズを使用してステートメントを再発行します。 BUFFERCOUNT: デフォルト[2]、[8]: SQL Server 2005以降のバージョン: (NumberofBackupDevices * [mystery_multiplier])+ NumberofBackupDevices +(2 …

3
包含データベースには欠点がありますか?
SQL Server 2012は、データベースに必要なすべて(ほとんどすべて)がデータベース自体に含まれる「包含」データベースの概念を導入しました。これは、サーバー間でデータベースを移動するときに大きな利点を提供します。新しいデータベースを設計するとき、これが私のデフォルトの戦略であるかどうかを知りたいと思います。 MSDNには、包含データベースのいくつかの欠点がリストされており、大きな欠点は、変更の追跡とレプリケーションのサポートが不足していることです。他にありますか?これらの機能を使用しない場合、包含データベースを使用しない理由はありますか?

7
SQL Serverデータベースがまだ使用されているかどうかを確認するにはどうすればよいですか?
いくつかのデータベースがまだ残っているSQL Serverインスタンスの使用停止を検討しています。 それらがまだユーザーまたはWebアプリケーションによって使用されているかどうかを確認するにはどうすればよいですか? 最終クエリの日付を取得するために実行できるT-SQLクエリを含むフォーラムスレッドを見つけました。動作しているようですが、この情報がデータベースを削除するのに十分かどうかを知りたいです。それは...ですか? 同様に役立つ代替方法がある場合。
33 sql-server  t-sql 

2
再帰共通テーブル式でEXCEPTを使用する
次のクエリが無限行を返すのはなぜですか?EXCEPT句が再帰を終了すると予想していました。 with cte as ( select * from ( values(1),(2),(3),(4),(5) ) v (a) ) ,r as ( select a from cte where a in (1,2,3) union all select a from ( select a from cte except select a from r ) x ) select a from r Stack Overflow に関する質問に答えようとしているときに、私はこれに出会いました。

2
PKインデックスの列の順序は重要ですか?
同じ基本構造を持ついくつかの非常に大きなテーブルがあります。それぞれにRowNumber (bigint)とDataDate (date)列があります。データは毎晩SQLBulkImportを使用してロードされ、「新しい」データはロードされません-その履歴レコード(エンタープライズではなくSQL標準なので、パーティショニングはありません)。 データの各ビットは他のシステムに結び付ける必要があり、各RowNumber/DataDate組み合わせは一意であるため、それが私の主キーです。 SSMS Table DesignerでPKを定義した方法により、RowNumber最初とDataDate2番目にリストされていることに気付きました。 また、私の断片化は常に非常に高い〜99%であることに気付きます。 今、それぞれDataDateが一度しか表示されないため、インデクサーが毎日ページに追加することを期待していますが、実際にはRowNumber最初に基づいてインデックス付けされているので、他のすべてを移動する必要がありますか? RownumberID列ではなく、外部システムによって(悲しいことに)生成されたintです。それぞれの開始時にリセットされますDataDate。 サンプルデータ RowNumber | DataDate | a | b | c..... 1 |2013-08-01| x | y | z 2 |2013-08-01| x | y | z ... 1 |2013-08-02| x | y | z 2 |2013-08-02| x | y | z ... …


5
条件の論理演算子OR ANDおよびWHEREの条件の順序
これらの2つのステートメントを調べてみましょう。 IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... 場合はCONDITION 1、IS TRUE、だろうCONDITION 2チェックしますか? 場合はCONDITION 3、IS FALSE、だろうCONDITION 4チェックしますか? 条件についてはどうですかWHERE:SQL ServerエンジンはWHERE句内のすべての条件を最適化しますか?SQL Serverオプティマイザーが条件を正しい方法で解決するために、プログラマは条件を正しい順序で配置する必要がありますか? 追加: リンクを提供してくれたジャックに感謝します。t-sqlコードからの驚きです。 IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS result ELSE SELECT 'False' AS result IF 1/0 = 1 AND …


7
テーブルの完全な構造をコピーする
いくつかの方法を使用すると、テーブルのコピーを作成すると、インデックス、PK、FKなどが失われます。たとえば、SQL Serverでは次のように言えます。 select * into dbo.table2 from dbo.table1; これは、テーブルの単純なコピーです。すべてのインデックス/制約がありません。(バックアップを使用せずに)テーブル構造をコピーするにはどうすればよいですか? 私は主にこれを手動で行うことを探していますが、それが不可能な場合は、任意の解決策を受け入れます。

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