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

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

3
RANK()とDENSE_RANK()は確定的ですか、非確定的ですか?
公式のMicrosoft BOLによると、DENSE_RANKは非決定的です(RANK())。しかし、Itzik Ben-Ganによるランキング関数によると 、「... RANK()およびDENSE_RANK()関数は常に決定論的です」。誰が正しい? 私がこれまでに見つけたもの: Microsoftの定義「特定の入力値セットで呼び出され、データベースの同じ状態が与えられると、決定論関数は常に同じ結果を返します。」 したがって、集合論の表では従業員 Employee Salary Sue Right 1.00 Robin Page 1.00 Phil Factor 1.00 および従業員2 Employee Salary Phil Factor 1.00 Sue Right 1.00 Robin Page 1.00 同じだ。ただし、ランキング関数は異なる値を返します。 CREATE TABLE [dbo].[Employees]( --[ID] [int] IDENTITY(1,1) NOT NULL, [Employee] [varchar](150) NOT NULL, [Salary] [smallmoney] NULL, ) ON [PRIMARY] …
27 sql-server 

2
多数の行を挿入する最速の方法は何ですか?
私はデータベースをステージングテーブルにロードします。このステージングテーブルから、外部キーを解決するために1-2回結合し、この行を最終テーブル(月ごとに1つのパーティションがある)に挿入します。3か月分のデータで約34億行あります。 これらの行をファイナルテーブルにステージングする最速の方法は何ですか?SSISデータフロータスク(ビューをソースとして使用し、高速ロードがアクティブになっている)またはInsert INTO SELECT ....コマンド?データフロータスクを試してみましたが、約5時間で約10億行(サーバー上の8コア/ 192 GB RAM)を得ることができ、非常に遅いと感じました。

1
クエリがtempdbへの流出を引き起こすのはなぜですか?
バックグラウンド 私は、48 GB RAMを搭載したWin 2008サーバー上のMSSQL 2008(標準)から、64 GB RAMを搭載したWindows 2012上のMSSQL 2012(64ビットWebエディション)を実行する新しいサーバーに160 GBデータベースを移行しています。古いサーバーは稼働しており、負荷がかかっています。新しいサーバーは運用されていません。新しいサーバーには、8つのtempdbファイル(各4GB)があります。 問題 新しいサーバーでのテストでは、多数のクエリで「実行中にデータをスピルするためにtempdbを使用した演算子」という警告が表示されることがわかりました。いくつかのクエリを書き直すことでソートを回避できましたが、これは実際には問題に対処していません。古いサーバーで同じクエリを実行しても、流出は発生しません。MSSQLがメモリ内の操作を完了できず、tempdbにスピル/ページングする必要がある場合、スピルが発生することを読みました。流出を心配する必要がありますか? 例 データベースでsp_updatestatsを実行したため、統計は最新である必要がありますが、推定行数と実際の行数にいくつかの相違があることに注意してください。 メモリの懸念 64 GBの58のMSSQLの最大メモリ設定を設定しました。現在、MSSQLはこのメモリを約35GB消費していますが、ワーキングセットはわずか682MBです。古いサーバー(本番環境ではありますが、負荷を処理します)には、44gbのメモリがMSSQLにコミットされており、そのうち43.5gbがワーキングセットに含まれています。 こぼれがメモリ設定に関連している可能性があるかどうかはわかりません-誰にもアイデアがありますか?現在、MSSQLにはエーカーのRAMがありますが、なぜある種の並べ替えやハッシュの一致のためにtempdbにこぼれるのですか?

6
暗号化されたビューまたはストアドプロシージャを表示する方法
サードパーティのデータベースに取り組んでいます。 右クリックしてビューの定義を表示しようとするCREATE TOとNEW QUERY EDIT WINDOW、エラーが発生します: このオブジェクトにはこのプロパティが存在しないか、アクセス権が不十分なために取得できない可能性があります。テキストは暗号化されます。

2
100を上限とする最大接続プール
Windows Server 2008ボックスでSQL Server 2008 R2 SP1を実行しています。Visual Studio 2010から次のことを実行する.NETスクリプトを実行しています。 データベースに到達する 変更を加える 繰り返す 繰り返しの合計回数は150回ですが、100の接続で停止しているため、その理由はわかりません。単一のスレッドを使用するようにスクリプトを調整することもできますが、将来の参照のために知っておくと便利なため、最大接続設定がどこにないのかを知りたいと思います。 これまでに確認した場所は次のとおりです。 Visual Studio 2010のSQL接続文字列(1000に設定されています) SSMSデータベースインスタンスの接続プロパティ(0 [無限]のユーザー接続に設定されます) Server 2008の情報をGoogleで検索したところ、100を超える接続を処理できるようです SP_WHO2論理接続に関する詳細情報を提供するコードをステップ実行し、接続の数が52で始まり、152の論理接続で「最大プール接続に達しました」というエラーでスクリプトエラーが表示されることを確認しました。 使用する接続文字列を変更しました Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000 他にどこを確認すればいいのかわかりません。ここには可動部品がたくさんあることは知っていますが、どこかで最大プール設定が不足しているような気がします。
27 sql-server 

4
これらのプランでは、一意のインデックスで(同じ)1000シークの推定コストが異なるのはなぜですか?
以下のクエリでは、両方の実行プランが一意のインデックスで1,000シークを実行すると推定されています。 シークは同じソーステーブルでの順序付けされたスキャンによって実行されるため、一見同じ順序で同じ値をシークする必要があります。 両方のネストされたループには <NestedLoops Optimized="false" WithOrderedPrefetch="true"> このタスクのコストが最初の計画では0.172434で、2番目の計画では3.01702である理由を誰もが知っていますか? (質問の理由は、明らかにはるかに低い計画コストのために、最初のクエリが最適化として私に提案されたためです。 ) セットアップ CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); INSERT INTO dbo.Target SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER BY @@SPID), LEFT(NEWID(),32) FROM master..spt_values v1, master..spt_values v2; INSERT INTO dbo.Staging …

6
SELECT DISTINCT TOP Nクエリがテーブル全体をスキャンするのはなぜですか?
SELECT DISTINCT TOP NSQL Serverクエリオプティマイザーによる最適化が不十分と思われるいくつかのクエリに遭遇しました。些細な例を考えてみましょう。2つの交互の値を持つ100万行のテーブルです。私が使用しますGetNumsのデータを生成する機能を: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; 次のクエリの場合: SELECT DISTINCT TOP 2 VAL FROM X_2_DISTINCT_VALUES OPTION (MAXDOP 1); …

4
すべて(1200万)のレコードを削除した後、SQL Serverの「空のテーブル」は遅いですか?
約150列のSQL Server 2008インスタンスがあります。以前、このテーブルに約1200万のエントリを追加しましたが、新しいデータセットに備えてテーブルをクリアしました。 しかし、空のテーブルの上に即座に実行されたかつてのようなことをコマンドcount(*)とselect top 1000では、SQL Management Studio今、実行に長い年月がかかります。 SELECT COUNT(*) FROM TABLE_NAME 0を返すのに11分以上かかりSELECT TOP 1000、空のテーブルを返すのに10分近くかかりました。 また、ハードドライブの空き領域が文字通り消えてしまったことにも気付きました(約100Gから20Gに減少)。間に発生した唯一のことは、私が実行した単一のクエリでした: DELETE FROM TABLE_NAME 世界では何が起こっているのですか?!?


4
SQL Server照合順序を変更する方法
サーバー全体と特定のデータベースのSQL Server 2008 R2 Express Default Collat​​ionを変更するにはどうすればよいですか? SQL Server Management Studioのビジュアルインターフェイスを使用してそれを行う方法はありますか?[サーバーのプロパティ]ウィンドウ(および対応する[データベースのプロパティ]ウィンドウ)では、このプロパティは編集できません。

3
ストアドプロシージャとインラインSQL
ストアドプロシージャは、実行パスを通じて(アプリケーションのインラインSQLよりも)より効率的であることを知っています。しかし、押されたとき、私はその理由についてあまり知らない。 この技術的な理由を知りたい(後で誰かに説明できるように)。 誰も私が良い答えを策定するのを手伝ってくれますか?

2
複数行で先行するコンマなしでCOALESCEを使用する方法は?
私は次を達成しようとしています: California | Los Angeles, San Francisco, Sacramento Florida | Jacksonville, Miami 残念ながら、私は「ロサンゼルス、サンフランシスコ、サクラメント、ジャクソンビル、マイアミ」を取得しています STUFF関数を使用して目的の結果を達成できますが、COALESCEを使用してよりクリーンな方法があるかどうか疑問に思っていましたか? STATE | CITY California | San Francisco California | Los Angeles California | Sacramento Florida | Miami Florida | Jacksonville DECLARE @col NVARCHAR(MAX); SELECT @col= COALESCE(@col, '') + ',' + city FROM tbl where city = …
27 sql-server  t-sql 

2
Eager Spoolが示す問題
現在SQL Server 2008 R2で実行中 UPDATEステートメントのパフォーマンスを向上させようとしています。showplanにEager Spool操作がポップアップ表示されます。スプール操作についての私の理解は非常に基本的です-更新中にテーブルの一時ストレージを作成します。 また、熱心なスプールは実行時間を大幅に短縮する一方で、多くの場合、テーブル構造やクエリステートメントの根本的な問題を示しています。 私の質問は非常に簡単です:クエリプランにEager Spoolが表示された場合、最初に対処すべき問題は何ですか? システムのすべての部分を分析してパフォーマンスを向上させます。どこから始めればよいかについてのガイダンスを探しています。

1
SQL Serverの統計は物理的にどこに保存されますか?
クエリオプティマイザーが使用する統計情報は、SQL Serverデータベースファイルとバッファープール内に物理的に保存されていますか? より具体的には、DMVやDBCCを使用して統計で使用されるページを把握する方法はありますか? SQL Server 2008 InternalsとSQL Server Internals and Troubleshootingの両方の書籍を所有していますが、いずれも統計の物理構造については説明していません。もしそうなら、私はこの情報を見つけることができません。

5
ランダムな順序を取得する最良の方法は何ですか?
結果のレコードをランダムに並べるクエリがあります。クラスター化インデックスを使用するため、含まれていない場合order byは、インデックスの順序でレコードを返す可能性があります。ランダムな行順序を確保するにはどうすればよいですか? 私はそれが「真に」ランダムではない可能性が高いことを理解しています。擬似ランダムで十分です。
27 sql-server 

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