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

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

2
指定された主キーに関連付けられた外部キーを見つける
特定のデータベースのどの列がPK / FK関係を介して結合されているかを確立する方法が必要です。特定のテーブルのPK / FK情報を返すには SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS cu WHERE EXISTS ( SELECT tc.* FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc WHERE tc.CONSTRAINT_CATALOG = 'MyDatabase' AND tc.TABLE_NAME = 'MyTable' /*AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'*/ AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME); GO しかし、そのようなクエリから返されたPKの場合、関連付けられたFKを確立するにはどうすればよいですか(1つがある場合)。 参照されたテーブルは次の方法でも取得できます。 SELECT CONSTRAINT_NAME = name, FOREIGN_SCHEMA = OBJECT_SCHEMA_NAME(parent_object_id), FOREIGN_TABLE = OBJECT_NAME(parent_object_id), …

1
選択されているインデックス付きビューのクラスター化インデックスに含まれる要因は何ですか?
簡単に言えば、 オプティマイザによるインデックス付きビューのインデックスの選択をクエリする要因は何ですか? 私にとって、インデックス付きビューは、オプティマイザーがインデックスを選択する方法について理解していることに反しているようです。私が見てきた、これは前に尋ねたが、OPはあまり好評ではなかったです。 私は本当に道しるべを探していますが、擬似的な例を作成してから、多くのDDL、出力、例を含む実際の例を投稿します。 私はEnterprise 2008+を使用していると仮定し、理解します with(noexpand) 疑似の例 この擬似的な例を見てみましょう。22個の結合、17個のフィルター、1000万行のテーブルを横断するサーカスポニーを含むビューを作成します。このビューは、実現するのに高価です(ええ、大文字のE)。SCHEMABINDとビューのインデックスを作成します。それから SELECT a,b FROM AnIndexedView WHERE theClusterKeyField < 84。私を回避するオプティマイザーロジックでは、基になる結合が実行されます。 結果: ヒントなし:720行で4825の読み取り、76ミリ秒で47 CPU、0.30523の推定サブツリーコスト。 ヒントあり:17読み取り、720行、4ミリ秒で15 CPU、0.007253の推定サブツリーコスト ここで何が起こっているのでしょうか?Enterprise 2008、2008 -R2、および2012で試してみました。ビューのインデックスを使用すると考えられるすべてのメトリックで、はるかに効率的です。これはアドホックであるため、パラメータスニッフィングの問題やデータの偏りはありません。 実際の(長い)例 あなたが自虐的なタッチでない限り、おそらくこの部分を読む必要はないでしょう。 バージョン うん、企業。 Microsoft SQL Server 2012-11.0.2100.60(X64)2012年2月10日19:39:15 Copyright(c)Microsoft Corporation Enterprise Edition(64-bit)on Windows NT 6.2(Build 9200:)(ハイパーバイザー) 景色 CREATE VIEW dbo.TimelineMaterialized WITH SCHEMABINDING AS SELECT TM.TimelineID, …

5
CTE結果をキャッシュ(遅延スプール)するためのプランガイドを作成する
私は通常、最初に正しいプランを使用するクエリを作成し、それを使用しない同様のクエリにコピーすることにより、プランガイドを作成します。ただし、特にクエリが完全に同じではない場合は、注意が必要です。ゼロから計画ガイドを作成する正しい方法は何ですか? SQLKiwiはSSISで計画を作成することについて言及しましたが、SQL Serverの適切な計画のレイアウトを支援する方法または有用なツールはありますか? 問題の特定のインスタンスは、このCTEです:SQLFiddle with cte(guid,other) as ( select newid(),1 union all select newid(),2 union all select newid(),3) select a.guid, a.other, b.guid guidb, b.other otherb from cte a cross join cte b order by a.other, b.other; そこにあるいかなる結果が正確に3つの異なる思い付くようにする方法guidsおよびこれ以上は?いくつかのSQL Server CTEの癖を克服するために複数回参照されるCTEタイプのクエリを含むプランガイドを含めることで、今後より良い質問に答えられることを望んでいます。
19 sql-server  t-sql  cte 

5
SSMSでサーバーエージェントが見つかりませんでした
私はガイドに従っています-http: //www.sqlchicken.com/2009/07/how-to-create-a-server-side-trace-with-sql-profiler/ステップ8に到達するまで動作しています 次に、新しく作成したスクリプトをスケジュールします。SSMSで、トレースするサーバーに接続します。SQL Serverエージェントに移動して展開し、ジョブフォルダーを表示できるようにします。[ジョブ]フォルダを右クリックして、[新しいジョブ]を選択します。 見つけられませんSQL Server Agent。これをどこでSQL Server Agent表示できますか?現在のユーザーにすべてのアクセス許可を与えました。


9
データベースオブジェクトのバージョン管理
開発者が作業しているデータベースが大きすぎます(多くのデータベースオブジェクトがあります)。dbオブジェクトの変更を管理する必要があります(変更管理)。当社には、dbの変更のみを担当する人はいません。そのため、データベースとスクリプトを同期できる、標準コードのバージョン管理などのデータベースオブジェクトの安全なソースが必要です。最高のものは何ですか。信頼性が高く、安価で、機能的-2つ選択してください:)

5
データベースの整合性を強化する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 これは、外部キー、チェック制約などを持たせる代わりに、アプリケーションにデータベースの整合性を強制することに意味があるでしょうか? 内部データベースツールを使用してデータベースの整合性を強制しない場合、パフォーマンスの向上はどの程度期待できますか?

4
SSD上のSQL Serverデータベース-テーブルごとに個別のファイルを使用する利点はありますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 約30のテーブルがあるデータベースを作成しています。各テーブルには数千万の行が含まれ、各テーブルには単一の重要な列とプライマリ/外部キー列が含まれ、重い場合でもクエリの効率を最大限に高めます。更新と挿入を行い、クラスター化インデックスを多用します。2つのテーブルには可変長のテキストデータが含まれ、そのうちの1つには何億もの行が含まれますが、残りのテーブルには数値データのみが含まれます。 使用可能なハードウェア(約64 GBのRAM、非常に高速なSSD、および16コア)からパフォーマンスの最後の一滴を絞り出したいので、各テーブルに独自のファイルを持たせることを考えていました。 2、3、4、5、またはそれ以上のテーブルに参加しています。各テーブルは常に個別のスレッドを使用して読み取られ、各ファイルの構造はテーブルの内容と密接に調整されます。 SQL Serverが特定のテーブルの内容に追加するため。 1つの注意点は、SQL Server 2008 R2 Web Editionにこだわっています。これは、自動水平分割を使用できないことを意味します。これにより、パフォーマンスの向上として除外されます。 テーブルごとに1つのファイルを使用すると、実際にパフォーマンスが最大化されますか、それとも冗長になるビルトインSQL Serverエンジンの特性を見落としていますか? 次に、テーブルごとに1つのファイルを使用するのが有利な場合create table、特定の論理ファイルではなくファイルグループにテーブルを割り当てるオプションしか提供されないのはなぜですか?そのため、シナリオ内のすべてのファイルに対して個別のファイルグループを作成する必要があります。これは、SQL Serverが、提案していることを実行することで得られる利点を想定していないことを示唆しています。

5
SQL:CPUまたはIOでない場合、INSERTの速度が低下するのは何ですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 書き込みが多い製品のデータベースがあります。SSDを備えた新しいサーバーマシンを購入しました。驚いたことに、挿入ははるかに遅いストレージを備えた古いマシンよりも高速ではありませんでした。ベンチマーク中に、SQL Serverプロセスが示すIOレートが非常に低いことがわかりました。 たとえば、ループの周りにBEGIN TRANとCOMMITを追加したことを除いて、このページにあるスクリプトを実行しました。せいぜい、ディスク使用量が7Mb / sに達するのを見ることができましたが、CPUはほとんど5%に触れませんでした。サーバーには64Gbがインストールされており、10を使用しています。合計実行時間は、最初の呼び出しでは2分15秒、その後の呼び出しでは約1分でした。データベースは単純なリカバリであり、テスト中はアイドル状態でした。各呼び出しの間にテーブルを削除しました。 なぜこのような単純なスクリプトがそんなに遅いのですか?ハードウェアはほとんど使用されていません。専用ディスクベンチマークツールとSQLIOの両方は、読み取りと書き込みの両方でSSDが500Mb / s以上の速度で正しく実行されることを示しています。ランダム書き込みはシーケンシャル書き込みよりも遅いことを理解していますが、クラスター化インデックスを持たないテーブルへのこのような単純な挿入は、はるかに高速になると予想されます。 最終的に、このシナリオははるかに複雑ですが、最初に単純なケースを理解する必要があると感じています。簡単に言うと、アプリケーションは古いデータを削除し、SqlBulkCopyを使用して新しいデータをステージングテーブルにコピーし、フィルター処理を実行し、最後にMERGEおよび/またはINSERT INTOを使用してデータを最終テーブルにコピーします。 ->編集1:Martin Smithによってリンクされた手順に従い、次の結果が得られました。 [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 …

2
既存のインデックスに新しいインデックスのすべての列が含まれているのに、なぜこの新しいインデックスを作成するとパフォーマンスが大幅に向上したのですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 LogテーブルとLogItemテーブルがあります。私は両方からいくつかのデータを取得するクエリを書いています。数千がLogsあり、それぞれLogが最大125まで持つことができますLogItems 問題のクエリは複雑なのでスキップしています(誰かが重要だと思うなら、おそらく投稿できるでしょう)が、SSMS推定クエリプランを実行すると、新しい非クラスタ化インデックスによってパフォーマンスが最大100%向上することがわかりました。 Existing Index: Non-clustered Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified Query Plan Recommendation CREATE NONCLUSTERED INDEX [LogReportIndex] ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified]) 楽しみのために、この新しいインデックスを作成してクエリを実行しましたが、驚いたことに、クエリが実行されるまでに10秒以上かかるのに1秒かかりました。 既存のインデックスがこの新しいクエリをカバーすると想定したので、私のクエリは、新しいクエリで使用される列のみに新しいインデックスを作成するとパフォーマンスが向上するのはなぜですか?where句で使用される列の一意の組み合わせごとにインデックスを作成する必要がありますか? 注:これは、SQL Serverが結果をキャッシュしているためだとは思いません。インデックスを作成する前に約25〜30回クエリを実行しました。以下。
19 sql-server  index 

6
インデックスの再編成中にトランザクションログがいっぱいになるのを防ぐ方法
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 トランザクションログのサイズを50 GBに事前に割り当てた複数のマシンがあります。再編成しようとしているテーブルのサイズは55〜60 GBですが、継続的に増加します。私が再編成したい主な理由は、スペースを再利用することであり、それによるパフォーマンス上の利点は追加のボーナスです。 テーブルの断片化レベルは30〜35%です。これらのマシンの一部では、「トランザクションログがいっぱいです」エラーが発生し、再編成が失敗します。トランザクションログのサイズは最大48GBに達します。これに対抗する良い方法は何ですか?自動インクリメントをオンにしていません。これを行うのは嫌です。 ログサイズをより大きな値に増やすことはできますが、将来テーブルサイズが大きくなると、値が十分ではなくなる可能性があります。また、ログサイズを均等に増やしようとすると、スペースを再利用するために再編成を行う目的が無効になります。これに効果的に対処する方法についてのアイデアはありますか?データ損失は許容されないため、バルクモードの使用はオプションではありません。

4
2つのテーブルまたはクエリ間で異なる行を簡単に表示する
同一のデータを持つ/返すことになっている2つの異なるテーブル/クエリがあるとします。これを確認します。次の例のように、各テーブルの一致しない行を表示して、すべての列を比較する簡単な方法は何ですか?テーブルには30個の列があり、その多くがNULL可能であると仮定します。 PKがない場合、またはPKごとに重複がある可能性がある場合、PK列だけで結合するだけでは十分ではなく、NULLを適切に処理する30の結合条件と厄介なWHERE条件でFULL JOINを実行する必要があります一致した行を除外します。 通常、問題が最悪であり、PKが論理的に使用可能になる可能性が非常に低いのは、スクラブされていないデータまたは完全に理解されていないデータに対して新しいクエリを作成するときです。問題を解決する2つの異なる方法を作成し、その結果を比較します。違いは、気づいていないデータの特殊なケースを強調しています。 結果は次のようになります。 Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 105 -- mismatch TableB Cat 27 87 -- mismatch 2 TableA Cat 128 92 -- no corresponding row TableB Lizard 83 NULL -- no corresponding …

4
sql-serverでデータベースの一部をバックアップおよび復元することは可能ですか?
クライアントサイトからサイトに定期的に転送するsql-server 2005データベースがあります。直接接続がなく、Webベースのファイル転送アプリケーションを介してファイルを転送する必要があるため、これには長い時間がかかります。データベースは現在約10GBですが、すべてのデータを必要とするわけではありません-ほとんどは監査テーブルと、再生成可能な計算値を保持するテーブルにあります。 監査テーブルを保持するファイルグループを作成することを検討しましたが、プライマリファイルグループをバックアップおよび復元できることを望んでいました。うまくバックアップできますが、復元時に同じデータベースに復元していないというエラーが表示されます。ファイルグループを使用して、データベースの一部を別のサーバーに復元することはできますか?これを行うためのより良い方法はありますか?

2
型フィールドのINTまたはCHAR
テーブルまたはTypeフィールドの最適な設計は何ですか?言い換えれば、このスキーマが与えられた場合:intchar(1) create table Car ( Name varchar(100) not null, Description varchar(100) not null, VehType .... not null ) それがために(パフォーマンス的に)、より効率的でVehTypeあることをintかchar(1)?5種類の車があり、0〜4の増分値を使用するか、タイプの文字(たとえば、「v」、「s」、「c」、「t」、「m」)を使用する必要があるとします。 それ以上の場合は、別のTypeテーブルを使用して外部キー関係を作成しますが、その必要性はわかりません。 私がいることがわかりsys.objectsカタログビューが文字使用するtypeフィールドを。その理由はありますか?私はただここで薄い空気をつかんでいますか、それは私がより快適なものですか?

3
SQL Serverログファイルの縮小はパフォーマンスにどのように影響しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 サイズが2GBのデータファイルを持つSQL Server 2008データベースがありますが、ログファイルは8GBを超えています。2008年以前のデータベースでは、「バックアップログ」とTRUNCATE_ONLYオプションを使用できましたが、2008以降のデータベースでは使用できなくなりました。 ログファイルを切り捨てるスクリプトがあります。 USE [MyDatabase] GO ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT DBCC shrinkfile('MyDatabase_log', 1) ALTER DATABASE [MyDatabase] SET RECOVERY FULL WITH NO_WAIT GO これはログファイルを完全に切り捨てますが、私の質問は次のとおりです。これはパフォーマンスに影響しますか? 私は毎日2回のフルバックアップを実行しているため、データのロールフォワードに関する限り、ログは実際には必要ありません。

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