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

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

4
すべての行を返すSELECT TOPで使用できる値はありますか?
エンドユーザーがクエリによって返される行数を定義できるようにします(SELECT TOP(@x))。すべての行が返される場所に入力できる値はありますか?または、すべての行を返す必要がある場合、TOP(@x)なしでクエリを動的に作成する必要がありますか? SQL Server 2012を使用しています。
13 sql-server 

2
SELECT TOP 1はクエリのパフォーマンスに悪影響を与えます。これを克服するdbaアクセス可能な方法はありますか?
運用アプリケーション(SQL Server 2014 Standardと通信するC#)には、以下のようなクエリがあります。ほとんどの場合、ミリ秒単位で実行されます。ただし、(特定の値の場合@Id)場合によっては非常に時間がかかり、1分ほどかかります。これはアプリのタイムアウトよりも長いため、ユーザーにとってアプリは失敗します。 "goes nuts"の場合、返される結果セットは他のすべてではないが多くの場合にそうであるように、正しく空です。 幸いなことに、これは実稼働環境と開発環境の両方で再現可能です。 開発者は、クエリから「TOP 1」を削除し、アプリが結果セットの余分な行を消費することを確認して、パフォーマンスの問題を解決すると言います。 クエリプランナーは、インデックスTOP 1が存在する場合はインデックスを提案しません。(開発中)。 クエリの変更とアプリの修正が進行中です。ロールアウトには時間がかかります。 私の質問:アプリが新しいクエリで変更される前に、この問題を克服するために、運用SQL Serverインスタンスをチューニングまたは微調整するDBAアクセス可能な方法はありますか? SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id JOIN person_group AS apg ON apg.person_id = bi.person_id JOIN pplan ON pplan.plan_id = sub.plan_id JOIN product ON product.product_id = [plan].product_id …

7
このツールの名前を知っている人はいますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 閉じた3年前。 Microsoft SQL Server 2012 Internals(2013、0735658560)の表紙にある赤いものが何であるかを理解しようと試みている間、生産的な作業は停止しました。何らかの外科的または電気的なツールだと思いますか? 考え?
13 sql-server 

3
SQL Serverの8 KByteデータページから512バイトが使用されていません
次の表を作成しました。 CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); 次に、クラスター化インデックスを作成しました。 CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); 次に、各サイズが256バイトである30行(テーブル宣言に基づいて)を入力しました。 DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO dbo.TestStructure (id, filler1, filler2) VALUES …

5
SQL Serverには、実行中のストアドプロシージャに渡されるパラメーターの値を決定する方法があります
実行中のストアドプロシージャを決定する1つの方法は、次のような「動的管理」メソッドを使用することです。 SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext ただし、これはストアドプロシージャのcreateステートメントのテキストのみを表示します。例えば: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id 理想的には、問題のあるパラメーターの特定のセットに対して非常に長く実行する原因となっている実行中のプロシージャーのパラメーターを確認したいと思います。 それを行う方法はありますか?(この質問では、 Aaron BertrandがDBCC InputBufferについて言及していますが、この問題には適切ではないと思います。)

1
削除ステートメントで使用されないクラスター化インデックス
次のように定義されたSQL Serverテーブルがあります CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] DateTime NOT …

2
欠落している日付に、グループの以前に入力された日付のデータ値を入力します
部門間で転送される画像ヘルプデスクチケット。チケットが開いている日ごとに、各チケットの1日の終わりに部門が何であるかを知りたい。テーブルには、営業日ごとの各チケットの最後の部門が含まれ、部門の変更がある(チケットが最初に開かれた日付と閉じられた日付の行を含む)。データテーブルは次のようになります。 CREATE TABLE TicketAssigment ( TicketId INT NOT NULL, AssignedDate DATE NOT NULL, DepartmentId INT NOT NULL); 必要なのは、Dateで順序付けられた前のTicketAssigment行のDepartmentIdを使用して、各TicketIdの欠落している日付を入力することです。 このようなTicketAssigment行がある場合: 1, '1/1/2016', 123 -- Opened 1, '1,4,2016', 456 -- Transferred and closed 2, '1/1/2016', 25 -- Opened 2, '1/2/2016', 52 -- Transferred 2, '1/4/2016', 25 -- Transferred and closed この出力が必要です: 1, …

3
DMV sys.dm_exec_requestsのtotal_elapsed_timeは完全に不正確ですか?
SQL Server 2012を実行していて、DMVを使用して監視するためにいくつかのクエリをまとめようとしています。ただし、DMV のtotal_elapsed_timeフィールドをsys.dm_exec_requests見ると、数字は途方に暮れています。以下に例を示します。 SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 私の計算*では、経過時間は約1,419,976ではなく、約349,103です。それは4倍以上ずれています。 *現在の時刻とstart_timeの差(ミリ秒単位)から、つまり SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); サーバー情報は次のとおりです。 SELECT @@VERSION; Microsoft SQL Server 2012 - 11.0.5592.0 (X64) Apr 17 2015 15:18:46 Copyright (c) Microsoft …

2
一括挿入時間の大きなばらつき
そのため、ステージングテーブルからデータを取得してデータマートに移動するための単純な一括挿入プロセスがあります。 このプロセスは、「バッチあたりの行数」のデフォルト設定を持つ単純なデータフロータスクであり、オプションは「tablock」および「チェック制約なし」です。 テーブルはかなり大きいです。データサイズが201GBでインデックススペースが49GBの587,162,986。テーブルのクラスター化インデックスは次のとおりです。 CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) 主キーは次のとおりです。 ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) 現在、BULK INSERTSSIS経由の実行速度が非常に遅いという問題が発生しています。100万行を挿入するのに1時間。テーブルに入力するクエリは既にソートされており、入力するクエリの実行には1分もかかりません。 プロセスの実行中に、5〜20秒かかり、次の待機タイプを示すBULK挿入を待機しているクエリを確認できます。 PAGEIOLATCH_EX。プロセスは、一度にINSERT約1000行までしか実行できません。 昨日、このプロセスをUAT環境に対してテストしているときに、同じ問題に直面していました。私はプロセスを数回実行し、この遅い挿入の根本原因を特定しようとしました。その後、突然5分未満で実行が開始されました。それで、私はそれをさらに数回実行しましたが、すべて同じ結果になりました。また、5秒以上待機していた一括挿入の数は、数百から約4に減少しました。 今、これは私たちが活動を大幅に落としてしまったというわけではないので困惑しています。 期間中のCPUが低い。 遅いときは、ディスクでの待機が少ないように見えます。 プロセスが5分未満で実行されていた時間枠の間に、実際にはディスク遅延が増加します。 また、このプロセスの実行が不十分な間、IOはずっと低くなりました。 すでに確認しましたが、ファイルが70%しかいっぱいになっていないため、ファイルの増加はありませんでした。ログファイルの残りは50%です。DBはシンプルリカバリモードです。DBには1つのファイルグループしかありませんが、4つのファイルに分散しています。 私が疑問に思っていることA:なぜ、これらの一括挿入でこんなに長い待ち時間が見られたのか。B:実行速度を上げるためにどのような魔法が発生しましたか? サイドノート。今日もがらくたのように走ります。 現在パーティション化されているUPDATE。しかし、それはせいぜい愚かな方法で行われます。 CREATE PARTITION SCHEME …

2
複数のファイルのファイルグループに割り当て単位を含む正確なファイルを特定する方法はありますか?
どのデータベースファイルに、データベース内に存在するさまざまなHoBT(アラインされたものとアラインされていないもの)のどの割り当てユニットが含まれているかについて、詳細なビューを取得したいと考えていました。 ファイルグループごとに複数のデータファイルの作成を開始するまで、私が常に使用してきたクエリ(以下を参照)は役立ちました。 select SchemaName = sh.name, TableName = t.name, IndexName = i.name, PartitionNumber = p.partition_number, IndexID = i.index_id, IndexDataspaceID = i.data_space_id, AllocUnitDataspaceID = au.data_space_id, PartitionRows = p.rows from sys.allocation_units au join sys.partitions p on au.container_id = p.partition_id join sys.indexes i on i.object_id = p.object_id and i.index_id = p.index_id join sys.tables …

2
MS SQL Serverでテーブル全体をロックしないようにSQLの挿入や更新を行う方法
DBの仕事を始めたばかりなので、基本的な質問に対する忍耐に感謝してください。ローカルマシンでSQL Server 2014を実行しています。小さなテーブルと、さまざまなアプローチをテストするための基本的なクライアントアプリケーションがあります。INSERT INTOand UPDATEステートメントの両方でテーブルロックのように見えるものを取得しています。クライアントは、次のコードを持つASP.NETアプリケーションです。 OleDbConnection cn = new OleDbConnection("Provider=SQLNCLI11; server=localhost\\SQLEXPRESS; Database=<my db>; user id=<my uid>; password=<my pwd>"); cn.Open(); OleDbTransaction tn = cn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand("INSERT INTO LAYOUTSv2 (LAYOUTS_name_t, LAYOUTS_enabled_b, LAYOUTS_data_m) VALUES ('name', '-1', 'data')", cn, tn); cmd.ExecuteNonQuery(); cmd.CommandText = "SELECT SCOPE_IDENTITY()"; int newkey = Decimal.ToInt32((decimal)cmd.ExecuteScalar()); Console.WriteLine("Created index …

1
SQL Serverがこれらの統計のフルスキャン以外の更新を拒否するのはなぜですか?
毎日のデータウェアハウスビルドで、比較的長時間(20分以上)統計の自動更新操作が実行されていることに気付きました。関係するテーブルは CREATE TABLE [dbo].[factWebAnalytics]( [WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL, [MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey] DEFAULT ((-1)), /*Other columns removed*/ CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED ( [MarketKey] ASC, [WebAnalyticsId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MarketKeyPS]([MarketKey]) ) ON …

4
既存のPKに自動インクリメントを追加する
別のDBに既に存在するDBにテーブルを作成しました。最初は古いDBデータが入力されていました。テーブルのPKは、それらのレコードに既に存在する値を受信する必要があったため、自動インクリメントすることはできませんでした。 ここで、PKを自動インクリメントとして使用する新しいテーブルが必要です。しかし、PKが既に存在し、データを取得した後、どうすればそれができますか?

2
差分バックアップを行うときにバッチ要求が増加するのはなぜですか
2012年のSQL Serverでのさまざまなアクティビティの長期追跡を開始しましたが、増分バックアップ中にバッチリクエストが増加していることに気付きました。 アイデアを提供するために、通常の日常的なバッチリクエストは1秒あたり約10〜20ですが、差分バックアップの実行中は1秒あたり100〜130に跳ね上がります。 私はこれがそれほど多くないことを知っていますが、それが何が起こっているのか興味がありました。 この問題のトラブルシューティングに役立つ情報がわからない。

1
この拡張イベントXMLをできるだけ早く細断するにはどうすればよいですか?
SQL Server 2008 R2で拡張イベントセッションを作成しました。セッションが実行され、予想どおりにイベントが発生すると収集されます。 イベントが比較的少ないときにxmlを細断すると、パフォーマンスは許容範囲内になります。何千ものイベントがあるとき、xmlを細断処理す​​るのに時間がかかります。 私は何か間違ったことをしていることを知っています。XMLエンジンの内部について何を理解するのに十分な知識を持っていません。 これは私の拡張イベントセッションの定義です。 IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON SERVER STATE = STOP; END DROP EVENT SESSION queries ON …

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