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

SQL Server 2012(メジャービルドバージョン11.00.xxxx)。sql-serverにもタグを付けてください。


2
ExecutionInstanceGUIDをSSISDBに関連付ける
SQL Server Integration Servicesの2012リリースであるSSISは、(特に)パッケージの操作を追跡するSSISDBカタログを提供しています。プロジェクト展開モデルを使用するソリューションの既定のパッケージ実行では、SSISDBへのログ記録が有効になります。 パッケージが実行されると、にSystem::ExecutionInstanceGUID明示的なロギング(sys.sysdtslog90/ sys.sysssislog)を使用している場合、特定のパッケージ実行のすべてのイベントを記録する値が設定されます。 私が知りたいのですが、どのように私はExecutionInstanceGUIDを結ぶんですもの SSISDBカタログに。または、SSISDBで実行されるSSISパッケージは、その値のcatalog.executions.execution_id 最終的に、既存のカスタム監査テーブルを使用して、SSISDBカタログの詳細な履歴にリンクしようとしていますが、リンクが見つからないようです。

1
SQL Server Profilerでトレース中に、プロシージャ呼び出しで着信パラメーター値を記録することは可能ですか?
SQL Server Profiler(私はSQL Server 2012を使用しています)を使用して、変数名を持つSQLだけでなく、パラメーター値を示す便利なトレースを生成しようとしています。ストアドプロシージャは、大量のインベントリデータを調べて非常に価値のある結果を生成します。既存の動作を文書化しようとしているので、ユニットテスト、正確な定義、およびリファクタリングを行って、適切なものにリファクタリングできます。 ストアドプロシージャがカーソルを作成し、whileループを実行するループ内で、54パラメーターサブプロシージャの実行を実行するストアドプロシージャがあります。これは簡略化されたビューです。 CREATE PROCEDURE [dbo].[OuterProcedure] ( @ProductCode varchar(8), -- 41 more parameters omitted ) AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET NOCOUNT ON DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations. -- OMIT ABOUT 10 temporary table declarations. DECLARE aCursor CURSOR FAST_FORWARD FOR SELECT …

1
ワークスペースメモリの内部
クリスチャンボルトン、ブレントオザールなどによるSQL Server 2008の内部とトラブルシューティング(イリノイのローカルライブラリから借用)に関する本を読んでいます。私の理解を確認または修正できます。 クエリメモリの付与を必要とするすべてのクエリまたは操作には、ワークスペースメモリが必要です。並べ替え、ハッシュ一致結合、並列処理(これについては不明)、一括挿入(不明)、インデックスの再構築などを使用した一般的なクエリでは、クエリワークスペースメモリが必要です。 ワークスペースメモリはSQL Serverバッファプールの一部であり(バッファプールの一部として割り当てられます)、最大ワークスペースメモリはバッファプールに割り当てられたメモリの75%です。既定では、1つのクエリでワークスペースメモリの25%を超える値を取得することはできません(SQL 2008 / SQL 2012では、リソースガバナーの既定のワークロードグループによって既定で制御されます)。 私の理解の確認を求めて 1)48 GB RAMと最大サーバーメモリが40 GBに設定されたシステムを考えると、これは最大ワークスペースメモリが30 GBに制限され、1つのクエリで10 GBを超えるワークスペースメモリ(クエリメモリ)を取得できないことを意味します。したがって、大量のハッシュ結合を実行している10億行で動作する不適切なクエリがあり、10 GBを超えるメモリ(ワークスペースメモリ)が必要な場合、このメモリ許可キューを介しても、すぐにディスクに流出しても問題ありませんか? 2)大量の並べ替え操作を行うクエリに5 MBのワークスペースメモリが割り当てられ、クエリのクエリ実行中に、クエリオプティマイザが悪い統計またはインデックスの欠落により実際に30 MBのワークスペースメモリを必要とする場合すぐにtempdbに流出します。実行中にシステムが十分なワークスペースメモリを使用できる場合でも、実行中にクエリが許可されたワークスペースメモリを超えると、ディスクにスピルする必要があります。私の理解は正しいですか?

3
SSMSを使用して専用管理者接続(DAC)を確立することは可能ですか?
SSMSを使用してDACに接続することはできますか?正しく理解できれば、サーバー名の前に「admin:」プレフィックスを使用することで可能になりますが、次のメッセージが表示されます。 専用の管理者接続は、設計により複数の接続を確立するため、SSMSを介してサポートされません。(Microsoft.SqlServer.Management.SqlStudio.Explorer)


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
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 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番目のサーバー(対応するインスタンスレベルのログインがない)でログインエラーが発生します。 この問題を解決するにはどうすればよいですか?ユーザーアカウントを特別な方法で設定することになっていますか?

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

1
これはサーバーの過負荷の症状ですか?
アプリケーションのスローダウンを診断しようとしています。このために、SQL Server 拡張イベントを記録しました。 この質問では、1つの特定のストアドプロシージャを見ています。 しかし、リンゴからリンゴへの調査として同様に使用できる12個のストアドプロシージャのコアセットがあります。 ストアドプロシージャの1つを手動で実行すると、常に高速に実行されます また、ユーザーが再試行した場合、高速で実行されます。 ストアドプロシージャの実行時間は大きく異なります。このストアドプロシージャの実行の多くは1秒未満で返されます。 そして、その「高速」バケットについては、1秒よりはるかに少ないです。実際には約90ミリ秒です。 しかし、2秒、3秒、4秒待たなければならない長いユーザーがいます。12、13、14秒待たなければならない人もいます。それから、22、23、24秒待たなければならない本当に貧しい魂がいます。 そして、30秒後、クライアントアプリケーションはあきらめ、クエリを中止し、ユーザーは30秒待つ必要がありました。 原因を見つけるための相関 だから私は相関させようとしました: 期間と論理読み取り 継続時間と物理読み取り 期間とCPU時間 また、相関関係を与えるものはありません。原因はないようです 継続時間と論理読み取り:少しでも多くの論理読み取りでも、継続時間は大きく変動します: 期間対物理読み取り:クエリがキャッシュから提供されず、多くの物理読み取りが必要な場合でも、期間には影響しません。 duration vs cpu time:クエリが0秒のCPU時間を使用した場合でも、2.5秒のCPU時間を使用した場合でも、期間の変動は同じです。 ボーナス:Duration v Physical ReadsとDuration v CPU timeが非常に似ていることに気付きました。これは、CPU時間を物理読み取りと相関させようとすると証明されます。 多くのCPU使用率がI / Oに由来することが判明しました。誰かわかったね! それで、実行時間の違いを説明できるクエリを実行する行為について何もなければ、それはそれがCPUまたはハードドライブとは無関係な何かであることを意味しますか? CPUまたはハードドライブがボトルネックだった場合。それがボトルネックではないでしょうか? ボトルネックはCPUであると仮定した場合、このサーバーのCPUの電力が不足していること: その後、より多くのCPU時間を使用した実行に時間がかかりませんか? 過負荷のCPUを使用して他の人と完了する必要がありますか? ハードドライブについても同様です。ハードドライブがボトルネックであると仮定した場合、ハードドライブがこのサーバーに十分なランダムスループットを持たないこと: その後、より多くの物理読み取りを使用した実行には時間がかかりませんか? 過負荷のハードドライブI / Oを使用して他の人と完了する必要があるためですか? ストアドプロシージャ自体は、書き込みも実行も要求もしません。 通常、0行(90%)を返します。 時折、1行(7%)を返します。 まれに2行(1.4%)が返されます。 そして最悪の場合、2行以上を返しました(一度に12行を返しました) したがって、異常な量のデータを返しているわけではありません。 サーバーのCPU使用率 …

3
並列処理(パーティションストリーム)演算子が行の推定値を1に減らすのはなぜですか?
SQL Server 2012 Enterpriseを使用しています。私は完全に直感的ではないいくつかの動作を示しているSQLプランに出会いました。大量のパラレルインデックススキャン操作の後、パラレル化(パーティションストリーム)操作が発生しますが、インデックススキャン(Object10.Index2)によって返される行の推定値を強制終了し、推定値を1に減らします。この振る舞いを説明するものに出会ったことはありません。クエリは非常に単純ですが、各テーブルには数百万のレコードが含まれています。これはDWHロードプロセスの一部であり、この中間データセットは何度も触れられますが、私が抱えている問題は、特に行の見積もりに関連しています。正確な行の推定値が並列処理(パーティション分割)演算子内で1になる理由を説明できますか?また、 計画を貼り付けるために完全な計画を投稿しました。 問題の操作は次のとおりです。 コンテキストを追加する場合に備えてプランツリーを含める: Paul Whiteが提出したこのConnectアイテムのバリエーションにぶつかることはありますか(彼のブログでさらに詳しく説明しています)。少なくとも、私が見つけた唯一のものは、プレイ中のTOP演算子がなくても、私が実行しているものに少しでも近いようです。


5
冗長性をチェックするためにテーブルを削除せずに非表示/無効にする方法は?
使用されなくなったWebサービスメソッドとデータベーステーブルを含む古いレガシーシステムを維持および拡張する必要があります。テーブルが実際に冗長であるかどうかは完全にはわからないので、それらを削除することを恐れています。 それらを削除せずに同じ効果を達成する他の方法はありますか(テーブルはこれ以上使用できません)?私の考えは、それらをDeleted現在のデフォルトとは異なるスキーマ(例:)に転送することdboでした。 IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Deleted') BEGIN EXEC('CREATE SCHEMA Deleted') END ALTER SCHEMA Deleted TRANSFER dbo.TableName; 他のオプションはありますか、スキーマアプローチには欠点がありますか?

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