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

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

2
DELETEがパフォーマンスに長引く影響を与えるのはなぜですか?
最後に、@ table変数と#tempテーブルのパフォーマンスを比較するためのテストスクリプトがあります。私はそれを正しく設定したと思います-パフォーマンスのタイミングはDELETE / TRUNCATEコマンドの外で取られます。私が得ている結果は次のとおりです(ミリ秒単位の時間)。 @Table Variable #Temp (delete) #Temp (truncate) --------------- -------------- ---------------- 5723 5180 5506 15636 14746 7800 14506 14300 5583 14030 15460 5386 16706 16186 5360 念のためGetDate()、バッチではなくステートメントの時点でCURRENT_TIMESTAMP(別名)が取得されることを示しているため、TRUNCATE / DELETEとSET @StartTime = CURRENT_TIMESTAMPステートメントの相互作用はありません。 select current_timestamp waitfor delay '00:00:04' select current_timestamp ----------------------- 2012-10-21 11:29:20.290 ----------------------- 2012-10-21 11:29:24.290 DELETEを使用してテーブルをクリアする場合、最初の実行と後続の実行の間のジャンプは非常に一貫しています。DELETEの理解に欠けているものは何ですか?これを何度も繰り返し、順序を交換し、成長を必要としないようにtempdbのサイズを調整しました。 CREATE TABLE …

2
SQLコンパイルはSQL Serverのパフォーマンスにどの程度影響しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 SQL Server 2005のインスタンスをプロファイリングしていますが、PerfMonのSQLServer:SQL Statistics - SQL Compilations/secメトリックを使用すると、平均が約170程度であることがわかります。 SQLプロファイラーを作成し、SP:CompileまたはSQL:Compileイベントを探しました。どうやら存在しません。私が見つけたStored Procedure/SP:RecompileとTSQL/SQL:StmtRecompileのイベント。プロファイラーに表示されるデータの量は、これらが間違ったイベントであることを示唆していますが、よくわかりません。 だから私の質問。これらのいずれかの答えは素晴らしいでしょう。 SQL Serverで何がコンパイルされているかを正確に確認するにはどうすればよいですか? 間違った指標を選んで調べましたか?PerfmonまたはSQL Profilerのどちらですか? Stored Procedure/SP:RecompileおよびTSQL/SQL:StmtRecompileSQLプロファイラでのイベント...彼らは、期間メトリックが含まれていません。これらのイベントがシステムへのタイミングの影響を確認する方法を提供しない場合、システムへのこれらのイベントの影響をどのように測定できますか。


2
FILESTREAMデータを除くデータベースの復元
コンテキスト 下部に大規模なデータベースを持つシステムを開発しています。これは、SQL Server 2008 R2で実行されているMS SQLデータベースです。データベースの合計サイズは約12 GBです。 これらのうち、約8.5 GBが単一のテーブルにありますBinaryContent。名前が示すように、これは、あらゆる種類の単純なファイルをBLOBとしてテーブルに直接格納するテーブルです。最近、FILESTREAMを使用して、これらすべてのファイルをデータベースからファイルシステムに移動する可能性をテストしています。 データベースに必要な変更を問題なく行いましたが、移行後もシステムは正常に動作しています。BinaryContentテーブルは次のように大まかになります。 CREATE TABLE [dbo].[BinaryContent]( [BinaryContentID] [int] IDENTITY(1,1) NOT NULL, [FileName] [varchar](50) NOT NULL, [BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL ) ON [PRIMARY] FILESTREAM_ON [FileStreamContentFG] ALTER TABLE [dbo].[BinaryContent] ADD [FileContentBinary] [varbinary](max) FILESTREAM NULL ALTER TABLE [dbo].[BinaryContent] ADD CONSTRAINT [DFBinaryContentRowGUID] DEFAULT (newsequentialid()) FOR [BinaryContentRowGUID] …

1
列ストアインデックスの構造は何ですか?
コードネームDenaliが付けられたSQL Server 2012の新機能の1つに、Columnstoreインデックスがあります。 Bツリー構造、リーフレベルとBツリーページのストレージの違い、含まれているフィールドの影響、それらを使用するための最適化、キーの順序など、通常の古い行ストアインデックスについてかなり知っています。 列ストアインデックスの内部情報を得るのに苦労しています。 どのように構成されていますか? Bツリーはありますか?その他の構造はありますか? データはどのように編成されていますか? どの種類の特定の演算子を使用するのが最適ですか? 他のアンチパターンを使用する際に避けるべきものはありますか? それらについて私が知ることができるものの多くは、基本的に「通常の」インデックスの正反対です。つまり、キーの順序付け、含まれるフィールド、非クラスタ化のみです。 どんな洞察も大歓迎です。

2
IDENTITY_INSERT ONが一度に1つのテーブルでしか許可されないのはなぜですか?
これは、というケースですIDENTITY_INSERTが一度に一つのデータベーステーブルにONにのみ設定することができますが、なぜですか?IDENTITY列はグローバルに一意ではないため、複数のテーブルに同時にIDを挿入することによって引き起こされる危険な状況は考えられません(少なくともIDENTITY INSERTを使用するよりも危険ではありません)。 IDENTITY INSERTはめったに使用されるべきではありませんが、ハードリミットの理由は何ですか?
20 sql-server 


1
SQL Profiler / perfmonの代わりにいつ拡張イベントを使用する必要がありますか?
拡張イベントは、より優れたテクノロジーであり、サーバーへの負荷が少ないように見えますが、SQL Profiler / perfmonには優れたツールがあります。また、拡張イベントには学習曲線が急勾配になっているようです。それぞれどのコンテキストで使用する必要がありますか?拡張されたイベントを利用するために、急な学習曲線を通過する価値はありますか?

4
NULLが最初にソートされるのはなぜですか?
列にNULL値があり、値の昇順で並べ替えるときに、NULLが最初にソートされるのはなぜですか? select 1 as test union all select 2 union all select NULL union all select 3 union all select 4 order by test 結果として NULL 1 2 3 4 NULLは「不定」または「不明」の可能性があると考え続けます。その場合、値は他のすべての値よりも大きくなる可能性があるため、最後にソートしませんか?(または、これはどこかのソートオプションですか?) 私はSQL Server 2008R2を使用していますが、これはすべてのSQL Server、おそらくすべてのRDBMSに当てはまると思われます。

1
MAX行を取得する方法
SQL Serverでは、データセットの最大行を取得するのは常に苦痛でした。パフォーマンスと保守性に関するいくつかのガイダンスを使用して、最大行を取得するメソッドのリストを探しています。 サンプル表: DECLARE @Test TABLE (ID INT IDENTITY(1,1), name VARCHAR(50), dateOfBirth DATETIME, TaxNumber varchar(10)) INSERT INTO @Test (name, dateOfBirth, TaxNumber) SELECT 'Fred', convert(datetime, '25/01/1976', 103), '123' UNION ALL SELECT 'Bob', convert(datetime, '03/03/1976', 103), '234' UNION ALL SELECT 'Jane', convert(datetime, '13/06/1996', 103), '345' UNION ALL SELECT 'Fred', convert(datetime, '14/02/1982', 103), …
20 sql-server 

2
トランザクションログの再構築
トランザクションログファイルが(SQL Serverがシャットダウンされている間に)削除された非常に大きなデータベース(〜6TB)があります。 データベースの切り離しと再接続。そして トランザクションログファイルの削除の取り消し ...しかし、これまでのところ何も機能していません。 現在実行中です: ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>') ...しかし、データベースのサイズを考えると、これを完了するにはおそらく数日かかります。 ご質問 上記のコマンドと次のコマンドに違いはありますか? DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) REPAIR_ALLOW_DATA_LOSS代わりに実行する必要がありますか? データベースを再構築できるようにデータが他のソースから派生していることは注目に値しますが、すべてのデータを再挿入するよりもデータベースを修復する方がはるかに迅速になると思われます。 更新 スコアを保持している場合:ALTER DATABASE/REBUILD LOGコマンドは約36時間後に完了し、報告しました: 警告:データベース 'dbname'のログが再構築されました。トランザクションの一貫性が失われました。RESTOREチェーンが破損し、サーバーは以前のログファイルのコンテキストを失ったため、それらが何であるかを知る必要があります。 DBCC CHECKDBを実行して、物理的な一貫性を検証する必要があります。データベースはdbo専用モードになっています。データベースを使用可能にする準備ができたら、データベースオプションをリセットし、余分なログファイルを削除する必要があります。 その後、DBCC CHECKDB成功しました(約13時間かかりました)。データベースバックアップの重要性(そしてプロジェクトマネージャーにサーバーへのアクセスを許可すること...)をすべて知ったとしましょう。

5
SQL Serverデータベースの状態を監視するために使用する最適なクエリは何ですか?
クエリを実行して、データベースのステータスに関する重要な情報を取得できるようにしたいと思います。つまり、データベースが良好な状態にあるかどうかをクエリで確認できるようにする必要があります。 これは、このチェックのために継承したクエリです。 SELECT name AS [SuspectDB], DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect], DATABASEPROPERTY(name, N'IsOffline') AS [Offline], DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency], has_dbaccess(name) AS [HasDBAccess] FROM sysdatabases WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1) OR (DATABASEPROPERTY(name, N'IsOffline') = 1) OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1) OR (has_dbaccess(name) = 0) そのクエリが結果を返す場合、データベースが疑わしい状態または潜在的に悪い状態にあるという仮定が行われます。 これを行うためのより良い方法はありますか?

5
T-SQLでIFを使用すると、実行計画のキャッシングが弱くなるか壊れますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 t-SQLバッチでIFステートメントを使用すると、パフォーマンスが低下することが示唆されています。このアサーションを確認または検証しようとしています。SQL Server 2005および2008を使用しています。 アサーションは、次のバッチでのことです:- IF @parameter = 0 BEGIN SELECT ... something END ELSE BEGIN SELECT ... something else END 次の実行には別のブランチが必要な場合があるため、SQL Serverは生成された実行プランを再利用できません。これは、現在の実行で必要なブランチを既に決定できることに基づいて、SQL Serverが実行プランから1つのブランチを完全に削除することを意味します。これは本当ですか? さらに、この場合に何が起こるか:- IF EXISTS (SELECT ....) BEGIN SELECT ... something END ELSE BEGIN SELECT ... something else END どのブランチを実行するかを事前に決定できない場合



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