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

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

1
where句が `value()`でフィルタリングするときにセカンダリ選択インデックスが使用されないのはなぜですか?
セットアップ: create table dbo.T ( ID int identity primary key, XMLDoc xml not null ); insert into dbo.T(XMLDoc) select ( select N.Number for xml path(''), type ) from ( select top(10000) row_number() over(order by (select null)) as Number from sys.columns as c1, sys.columns as c2 ) as N; 各行のサンプルXML: <Number>314</Number> …

1
RESOURCE_SEMAPHOREおよびRESOURCE_SEMAPHORE_QUERY_COMPILEの待機タイプを解決する方法
以下の構成のサーバーでホストされている、サイズ300 GBのデータベースの1つからデータをヒット/フェッチする、実行速度の遅いSQLサーバークエリの根本原因を突き止めようとしています。 Windows Server 2003 R2、SP2、Enterprise Edition、16 GB RAM、12 CPU's 32ビット SQL Server 2005、SP4、Enterprise Edition、32ビット。 64ビットへのアップグレードについては既に1か月以上かかるとの情報を提供しています。 しかし、現在の問題では、メモリのプレッシャーを解決できるか、最終的にRAMを増やすという結論に達することができる場合、データを収集しようとしています。 完了したアクション:このデータベースでは、インデックスの再作成と統計の更新が適切です。 以下に示すように、過去5日間、ロード時間中に実行されたセマフォのwaittypeに気付きました。 以下のクエリの後のいくつかの情報:バッファのサイズ= 137272 SELECT SUM(virtual_memory_committed_kb) FROM sys.dm_os_memory_clerks WHERE type='MEMORYCLERK_SQLBUFFERPOOL' セマフォメモリ=以下のクエリごとに644024 SELECT SUM(total_memory_kb) FROM sys.dm_exec_query_resource_semaphores 以下はdm_exec_query_resource_semaphores、sys.dm_exec_query_memory_grantsDMV から収集された詳細情報です。 したがって、上記の情報が収集され、SP_Blitzデータごとにリソースセマフォが問題のようです。 リソースセマフォIDに割り当てられたメモリ 'target_memory_kb'は、使用可能な16 GB RAMと比較して低すぎますか。 注* 8時間の分析ごとに 'target_memory_kb'を実行すると、使用可能な16 GBと比較して常に1 GB未満になりますか? ここで問題になる可能性のあるものと解決方法は、提案してください ありがとう

1
SQL Serverのオプティマイザーは、結合されたテーブルの行数をどのように推定しますか?
AdventureWorks2012データベースでこのクエリを実行しています。 SELECT s.SalesOrderID, d.CarrierTrackingNumber, d.ProductID, d.OrderQty FROM Sales.SalesOrderHeader s JOIN Sales.SalesOrderDetail d ON s.SalesOrderID = d.SalesOrderID WHERE s.CustomerID = 11077 推定実行計画を見ると、次のことがわかります。 最初のインデックスシーク(右上)はIX_SalesOrderHeader_CustomerIDインデックスを使用し、リテラル11077で検索しています。推定推定値は2.6192行です。 を使用するDBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAMと、値11077が2つのサンプリングされたキー11019と11091の間にあることがわかります。 11019から11091までの個別の行の平均数は2.619718であり、2.61972に丸められます。これは、インデックスシークで表示される推定行の値です。 私が理解していない部分は、SalesOrderDetailテーブルに対するクラスター化インデックスシークの推定行数です。 私が実行した場合DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID'): したがって、SalesOrderID(私が参加している)の密度は3.178134E-05です。これは、1 / 3.178134E-05(31465)がSalesOrderDetailテーブルの一意のSalesOrderID値の数に等しいことを意味します。 SalesOrderDetailに31465個の一意のSalesOrderIDがあり、均等に分布している場合、SalesOrderIDあたりの平均行数は121317(行の総数)を31465で割った値です。平均は3.85561です。 したがって、ループスルーの推定行数が2.61972で、平均が3.85561で返される場合、推定行数は2.61972 * 3.85561 = 10.10062になると思います。 ただし、推定行数は11.4867です。 2番目の推定値の私の理解は間違っていると思います。異なる数字はそれを示しているようです。私は何が欠けていますか?

2
SQL Serverインデックス更新のデッドロック
同時に実行するとデッドロックが発生する2つのクエリがあります。 クエリ1-インデックス(index1)に含まれる列を更新します。 update table1 set column1 = value1 where id = @Id table1でXロックを取得してから、index1でXロックを試行します。 クエリ2: select columnx, columny, etc from table1 where {some condition} index1でS-Lockを取得してから、table1でS-Lockを試行します。 同じクエリを維持しながらデッドロックを防ぐ方法はありますか?たとえば、更新前に更新トランザクションのインデックスでX-Lockを何らかの方法で取得して、テーブルとインデックスのアクセスが同じ順序であることを確認できますか?デッドロックを防ぐことができますか? 分離レベルは読み取りコミットです。インデックスの行ロックとページロックが有効になっています。同じレコードが両方のクエリに参加している可能性があります。パラメータが表示されないため、デッドロックグラフからはわかりません。 デッドロックグラフ

2
sys.allocation_unitsおよびsp_spaceusedのスペース使用量
DMVがページ数と行数に関する正確な情報を保持していないことは既知の事実です。ただし、統計を更新しても、なぜ更新されないのかわかりません。 私は監視ツールに取り組んでおり、各インデックスとデータのディスクサイズなどを知りたいと思っています。最終的には、適切なフィルファクターなどを見つけたいと思っています。 私の関数と古いsp_spaceusedで使用されるスペースは、スペース使用量で少し異なりますが、レコード数では異なりません。 私のセレクトに足りないものがありますか? これはsp_spaceusedです(その後、数値をMBに変換します)。 sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused しかし、以下のselect \ codeのコードを実行すると、わずかに異なる数字が表示されます。 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS TableName, t.type_desc, t.is_ms_shipped, t.is_published, t.lob_data_space_id, t.filestream_data_space_id, t.is_replicated, t.has_replication_filter, t.is_merge_published, t.is_sync_tran_subscribed, --t.is_filetable, i.name as indexName, …

1
非クラスター化インデックスで異なる行を更新するときのデッドロック
idフィールドでクラスター化インデックスと非クラスター化インデックスを使用すると、ロックの動作が異なることに気付きながら、デッドロックの問題を解決しています。clustedインデックスまたはプライマリキーがidフィールドに適用されると、デッドロックの問題は解決されるようです。 異なる行に対して1つ以上の更新を実行する異なるトランザクションがあります。たとえば、トランザクションAはID = aの行のみを更新し、tx BはID = bの行のみを更新します。 そして、インデックスなしでは、更新はすべての行の更新ロックを取得し、必要に応じて排他ロックに変換し、最終的にデッドロックにつながることを理解しています。しかし、非クラスター化インデックスでは、デッドロックが依然として存在する理由を見つけることができません(ただし、ヒット率は低下しているようです) データ表: CREATE TABLE [dbo].[user]( [id] [int] IDENTITY(1,1) NOT NULL, [userName] [nvarchar](255) NULL, [name] [nvarchar](255) NULL, [phone] [nvarchar](255) NULL, [password] [nvarchar](255) NULL, [ip] [nvarchar](30) NULL, [email] [nvarchar](255) NULL, [pubDate] [datetime] NULL, [todoOrder] [text] NULL ) デッドロックトレース deadlock-list deadlock victim=process4152ca8 process-list process id=process4152ca8 taskpriority=0 …

3
SQL Server 2012でのPK GUIDのインデックス作成
私の開発者は、ほとんどすべてのテーブルでGUIDをPKとして使用するようにアプリケーションを設定しており、デフォルトでSQL ServerはこれらのPKでクラスター化インデックスを設定しています。 システムは比較的新しく、最大のテーブルは100万行を超えていますが、インデックス作成を検討しており、近い将来必要に応じて迅速にスケーリングできるようにしたいと考えています。 したがって、私の最初の傾向は、クラスター化インデックスを、DateTimeのbigint表現である作成済みフィールドに移動することでした。ただし、CXを一意にできる唯一の方法は、このCXにGUID列を含めることです。ただし、最初に作成されます。 これにより、クラスタリングキーの幅が広がりすぎて、書き込みのパフォーマンスが向上しますか?読み取りも重要ですが、書き込みはおそらくこの時点で大きな懸念事項です。

3
ネットワークを切断するとクエリが停止しますか?
最近、100,000レコードに対して更新クエリを実行しました。クエリの実行中にミスを犯し、ネットワークケーブルをすぐに抜いたことに気付きました。 更新クエリ 処理を停止して完全にロールバックしますか? 処理を完了してコミットしますか? 処理を停止し、ターゲット行の一部のみを更新したままにしますか?


2
SQL Server 2012シーケンスのリセット
私は、SEQUENCEオブジェクトを活用する特定のテーブルをテストし、データを取り込むプロセスにいます。このプロセスでは、何万もの挿入行をテーブルに追加するテストを行っています(これをプログラムする方法に慣れていないため)。この特定のテーブルで見られる問題は、別の母集団テストを開始したときに、SEQUENCE希望する最初の数値(1)にリセットされないことです。 新しいテストを再実行する場合は、問題のテーブルを削除してから次を実行します。 DROP SEQUENCE foo.fee; GO DROP SCHEMA foo; GO テストを再実行する場合、次のSCHEMA&SEQUENCEコマンドを実行します。これらのコマンドは、以下の順序で実行されます。 CREATE SCHEMA foo; GO CREATE SEQUENCE foo.fee START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE; GO 次に、テーブルを作成します。 CREATE TABLE foo.sample_table_with_data (order_number bigint PRIMARY KEY NOT NULL, sample_column_one nvarchar(max) NULL, sample_column_two nvarchar(max) NULL, sample_column_three nvarchar(max) NULL) GO それが完了したら、次の挿入コマンドを50,000回実行します。 …

4
ログインは可用性グループ間で同期していません
AlwaysOnグループには2台のサーバーがあります。 同期された各データベース内のユーザーアカウントは両方のサーバーに存在しますが、データベースインスタンスレベルのログインはいずれかのサーバーにのみ存在します。つまり、DBINSTANCE-> Security-> Loginsが1つのサーバーにありません。 したがって、フェールオーバーが発生すると、2番目のサーバー(対応するインスタンスレベルのログインがない)でログインエラーが発生します。 この問題を解決するにはどうすればよいですか?ユーザーアカウントを特別な方法で設定することになっていますか?

2
CTEをセミコロンで開始する必要があるのはなぜですか?
Aaron Bertrandが数値テーブルの代わりにCTEを使用することを提案しているStackOverflowの投稿を見ているところです。私の質問は、なぜCTEの最初の行がセミコロンで始まるのですか? ;WITH n AS (SELECT TOP (10000) n FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 ) AS x ORDER BY n ) SELECT n FROM n ORDER BY n; -- look ma, no gaps! これは、WITHステートメントが以前のSELECT何かに解析されないようにするためですか?WITHの前にセミコロンを使用することについて、SQL Server 2005 BOLには何も表示されません。
13 sql-server  t-sql  cte  syntax 

4
CREATE FILEでオペレーティングシステムエラー5が発生しました(アクセスが拒否されました。)
SQL Server Management Studioで次のスクリプトを実行しようとしています。 USE [master] GO CREATE DATABASE [test1] ON PRIMARY ( NAME = N'test1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf', SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) LOG ON ( NAME = N'test1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf', SIZE = 164672KB , MAXSIZE = …

2
SQLエージェントはnext_run_date / next_run_time値をいつどのように更新しますか?
msdbデータベースのsp_add_jobscheduleプロシージャを使用して、SQLエージェントジョブに新しいスケジュールを追加するために、T-SQLのコードに取り組んでいます。新しいスケジュール(通常は特定の日時に1回だけ)を追加し、すぐにsysjobschedulesとsysschedulesの値を見ると、新しいスケジュールが追加され、SQLエージェントのjob_idに関連付けられていることがわかりますジョブ。ただし、next_run_dateおよびnext_run_timeの値には0が含まれています。私が戻ってきて、2、3分後に再びそれらを見ると、彼らはまだそれらに0を示しています。ただし、さらに5分または10分後に戻ってくると、次にスケジュールされた実行に対応する日付と時刻の値が正しく表示されるようになりました。 だから私の質問は: これらの値はどのくらいの頻度で更新されますか? これらの値を更新するプロセスは何ですか? たとえば、1分後のスケジュールを追加する場合、next_run_date / timeがまだ更新されていないため、ジョブが実行されないということですか? 新しいスケジュールを追加するために使用するコードの例: exec msdb.dbo.sp_add_jobschedule @job_id = @jobID , @name = @JobName , @enabled = 1 , @freq_type = 1 , @freq_interval = 0 , @freq_subday_type = 0 , @freq_subday_interval = 0 , @freq_relative_interval = 0 , @freq_recurrence_factor = 0 , @active_start_date = @ScheduleRunDate , …


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