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

SQL Server 2008 R2(メジャービルドバージョン10.50.xxxx)。また、sql-serverでタグ付けしてください。

3
同じサーバー上の2つのインスタンス間で共有されるものは何ですか?
単一のWindowsサーバーにSQL Serverの複数のインスタンスをインストールします。サーバーはベアメタルWindows 2008 R2であるため、VMは使用できません。 セキュリティのために、管理、Windowsサービス、アカウントなど、2つのインスタンスが何も共有しないようにする必要があります。そのため、質問は次のとおりです。 WindowsサーバーにSQL Serverの複数の「インスタンス」をインストールする場合、何が共有されますか?

1
SQL Serverは、述語が相関していることをどのように知っていますか?
:診断しながら、SQL Server 2008 R2のが悪いカーディナリティ推定(シンプルインデックスにもかかわらず、最新の統計情報など)ので、貧弱なクエリ計画を照会し、私はおそらく関連のKBの記事見つけ クエリを実行するとパフォーマンスの低下:FIXをSQL Server 2008またはSQL Server 2008 R2またはSQL Server 2012の相関AND述語を含む KB記事の意味は「相関」によって推測できます。たとえば、述語#2と述語#1は、主に同じ行を対象としています。 しかし、SQL Serverがこれらの相関関係をどのように認識しているかはわかりません。テーブルには、両方の述語の列を含む複数列のインデックスが必要ですか?SQLは統計を使用して、ある列の値が別の列と相関しているかどうかを確認しますか?または、他の方法が使用されていますか? 私はこれを2つの理由で尋ねています: この修正プログラムを使用してどのテーブルとクエリが改善される可能性があるかを判断するには #1に影響を与えるためにインデックス作成、統計などで何をすべきかを知るため

3
存在しない場合は、コードによって新しい関数を作成します
データベースにスクリプトで新しい関数を作成したい。スクリプトコードは次のとおりです。 IF Exists(Select * From sys.sysobjects A Where A.name =N'fn_myfunc' and xtype=N'FN') return; CREATE FUNCTION fn_myfunc () returns varchar(10) AS Begin ... End しかし、上記のスクリプトを実行すると、SQL Serverはエラーを返します。 'CREATE FUNCTION' must be the first statement in a query batch.

2
dboスキーマの下にテーブルが作成されない
SSMSでテーブルを作成するとき、次のステートメントを実行すると気付きました。 CREATE TABLE [tableName]; テーブルは独自のスキーマの下に作成されます(dboではありません)。したがって、dboスキーマの下で作成するには、次のように明示的に宣言する必要があります。 CREATE TABLE [dbo].[tableName]; テーブルを作成するときに[dbo]部分を指定する必要がないように、誰かが方法(サーバー全体の設定など)を知っていますか?

2
SQL Server Frozen Ghost Cleanupの回避策が必要です
行数が5Mから1.5Gのテーブルがいくつかあります 各テーブルにはBLOBフィールドがあり、そのサイズは100バイトから30 Mバイトまで変化し、「行外の大きな値タイプ」= ONとして保存されます。 テーブルは異なるファイルグループに格納され、3〜4個のファイルがそれぞれ異なるディスク@異なるLUN @非常に高速なSAN これらのテーブルは毎日、サイズが5〜100 Gbで、60万〜150万行に拡大します。 2週間から6か月まで変化する一定の時間が経過すると、行の一部が削除されるかアーカイブDBに移動されるため、6か月以上前の作業テーブルには行がありません。 サーバーの現在の構成: SQLサーバーエンジンは2008 R2 SP1 Enterprise @ 24コア、@ 64Gb RAM SQL Serverは、追加の起動フラグを使用して実行されます。 -T 3640; (ストアドプロシージャのステートメントごとにクライアントにDONE_IN_PROCメッセージを送信する必要がありません。これは、SET NOCOUNT ONのセッション設定に似ていますが、トレースフラグとして設定されると、すべてのクライアントセッションがこのように処理されます) -T 1118;(tempDBの割り当てを一度に1pg(最初の8ページ)から1エクステントに切り替えます。) -T 2301;(意思決定支援クエリに固有の高度な最適化を有効にします。このオプションは、大規模なデータセットの意思決定支援処理に適用されます) -T 1117;(すべてのデータファイルを一度に成長させます。それ以外の場合は順番に進みます。) -E; (ファイルグループ内の各ファイルに割り当てられるエクステントの数を増やします。このオプションは、インデックスまたはデータスキャンを実行するユーザーの数が限られているデータウェアハウスアプリケーションに役立ちます) -T 834; (SQL Serverはバッファプール用に割り当てられたメモリのためのWindowsの大きなページの割り当てを使用するようにします http://msdn2.microsoft.com/en-us/library/aa366720.aspx、 http://support.microsoft。 com / kb / 920093) SQL Serverはラージページ拡張機能を使用します SQL Serverは高速ファイル初期化オプションを利用します AUTOSHRINKはすべてのデータベースでオフです 問題がある …

2
最適化:プロシージャの最上部への変数宣言の移動
いくつかのストアドプロシージャの最適化に取り組んでいる間、DBAに座って、高いブロッキングおよび/または高い読み取り/書き込みアクティビティでいくつかのストアドプロシージャを実行しました。 DBAが言及したことの1つTABLEは、再コンパイルを回避するために、ストアドプロシージャの最上部ですべての変数(特に変数)を宣言する必要があることです。 これは私がこれを聞いた最初のものであり、私たちが持っているすべての異なるストアドプロシージャを再検討する前に、いくつかの確認を探していました。彼はそれを「コードの遅い表示」と呼び、再コンパイルはブロッキングを説明するスキーマをロックしていました。 すべての変数宣言をストアドプロシージャの先頭に移動すると、再コンパイルが減りますか?

1
SQL ServerのShowplan XMLの解釈
サイトhttp://sqlfiddle.comに、ユーザーがクエリの未加工の実行計画を表示できる機能を展開しました。PostgreSQL、MySQL、および(ある程度)Oracleの場合、生の実行計画の出力を見ると理解できるように見えます。ただし、SQL Server(で生成されたSET SHOWPLAN_XML ON)の実行計画の出力を見ると、比較的単純なクエリであっても、大量のXMLが処理されます。次に例を示します(この「フィドル」の最後のクエリの実行計画から取得:http ://sqlfiddle.com/#!3/ 1fa93/1): <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="
select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96"> <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/> <QueryPlan CachedPlanSize="16" CompileTime="0" CompileCPU="0" CompileMemory="72"> <RelOp NodeId="0" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="3" EstimateIO="0.003125" EstimateCPU="0.0001603" …

1
SQL ServerでBase64文字列をネイティブにデコードする
私が持っているvarchar、私はそれのプレーンテキスト同等にデコードしたいBase64でエンコードされたテキスト文字列を保持するSQL Serverのテーブルのカラムを SQL Serverには、このタイプのものを処理するためのネイティブ機能がありますか? base64文字列の例: cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA== デコードするもの: role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764

4
クエリを変更してオペレーターの見積もりを改善する
許容時間内に実行されるクエリがありますが、そこから可能な限り最高のパフォーマンスを絞り出したいです。 私が改善しようとしている操作は、ノード17からのプランの右側にある「インデックスシーク」です。 適切なインデックスを追加しましたが、その操作に対して得られる推定値は、想定される値の半分です。 インデックスを変更し、一時テーブルを追加してクエリを書き直すことを探しましたが、適切な見積もりを得るためにこれ以上単純化することはできませんでした。 他に私が試すことができるものについて誰か提案がありますか? 完全な計画とその詳細については、こちらをご覧ください。 匿名化されていないプランはここにあります。 更新: 質問の最初のバージョンは多くの混乱を引き起こしたと感じているので、いくつかの説明とともに元のコードを追加します。 create procedure [dbo].[someProcedure] @asType int, @customAttrValIds idlist readonly as begin set nocount on; declare @dist_ca_id int; select * into #temp from @customAttrValIds where id is not null; select @dist_ca_id = count(distinct CustomAttrID) from CustomAttributeValues c inner join #temp a on c.Id …

2
SqlCommand.Prepare()を使用する意味と利点は何ですか?
SQLクエリの実行前にSqlCommand.Prepare()(MSDNを参照)メソッドが広く使用されている開発者コードに出会いました。そして、これの利点は何でしょうか? サンプル: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); 私は少し遊んでトレースしました。Prepare()メソッドを呼び出した後にコマンドを実行すると、SQL Serverで次のステートメントが実行されます。 declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 その後、パラメータが値を取得してSqlCommand.ExecuteNonQuery()呼び出されると、次がSql-Serverで実行されます。 exec sp_execute 1,@id=20 私には、これはステートメントがPrepare()実行されるとすぐにコンパイルされるように見えます。これの利点は何でしょうか?これは、それがプランキャッシュに入れられ、目的のパラメーター値で最終クエリが実行されるとすぐに再利用できることを意味しますか? SqlParametersで実行されるSqlCommandsは、常にプロシージャコールでラップされることがわかりました(別の質問で説明しました)sp_executesql。これにより、SQL Serverは、パラメーター値に依存しないプランを保存および再利用できます。 これに関してprepare()は、メソッドが役に立たないのか、時代遅れののか、ここで何かが足りないのでしょうか?

5
プロパティサイズはデータベースでは使用できません
最近、データベースのバックアップ元と同じインスタンス(SQL Server 2008 R2 Enterprise)にデータベースを復元しましたが、データベースプロパティにアクセスできないことがわかりました。 私は次のことをしました: を使用してデータベース所有者が正しく設定されていることを確認しましたsp_helpdb。 データベース所有者をに変更しましたsa。修正ではありません。 データベースの所有者をsysadminユーザーに戻しました。修正ではありません。 DBCC updateusage影響を受けるデータベースに対して発行されました。修正ではありません。 DBCC CheckDB復元されたコピーを別のインスタンスに実行します。破損は見つかりませんでした。(同じバックアップファイルから)復元されたコピーは、データベースプロパティウィンドウにアクセスするときにエラーをスローしませんでした。 誰でも助けることができますか? プロパティを表示しようとすると表示されるエラーメッセージは次のとおりです。 要求されたダイアログを表示できません。(SqlMgmt) データベース '[DBNAME]'のプロパティサイズは使用できません。 このプロパティはこのオブジェクトには存在しないか、アクセス権が不十分なために取得できない可能性があります。(Microsoft.SqlServer.Smo) 私はsysadminこのインスタンスです。 更新:提案されたように、新しいユーザーを作成し、sysadminにし、データベース所有者をそれに変更しました。残念ながら修正ではありません。プロファイラトレースが有用なものを生成するかどうかを確認します。 更新:アーロン-元のデータベースの名前が変更され、オフラインになりましたが、そのインスタンスに残っています。その後、そのデータベースのバックアップは元の名前を使用して復元されました。新しいデータベースファイルのファイル名は、元のmdf / ldfと同じフォルダーにあるため、元のファイルとは異なります。復元されたデータベースは現在、通常どおり重要なアプリを駆動しています。


1
sp_procedure_params_90_rowsetでの過度のコンパイルブロッキング
MSDNでのこの質問の復活:Blocked-process-report:このwaitresourceとは何ですか "OBJECT:32767:124607697:0 [COMPILE]" プロファイラーでこれらのステートメントをキャッチしました。それらはすべて3秒以上の持続時間を持っています。いくつかの10以上。ブロックアクティビティは、MSDNからのリンクと同じです。 呼び出しはすべて3つの部分の命名を使用します。すべては、次のような形式で異なるprocを指定します。 exec [db1].[sys].sp_procedure_params_90_rowset N'proc1', 1, NULL, NULL exec [db2].[sys].sp_procedure_params_90_rowset N'proc2', 1, NULL, NULL exec [db3].[sys].sp_procedure_params_90_rowset N'proc3', 1, NULL, NULL exec [db4].[sys].sp_procedure_params_90_rowset N'proc4', 1, NULL, NULL このレベルのブロックを減らすにはどうすればよいですか? (編集)私は今、同じことを見ています: exec [db1].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db2].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db3].[sys].sp_primary_keys_rowset N'view1', N'dbo' exec [db4].[sys].sp_primary_keys_rowset N'view1', N'dbo' 体系的な何かが起こっていますが、他に何をすべきかわかりません。呼び出し元はADOを介したVB6です。これらの呼び出しを行うのはADOです。 ブロックされたプロセスレポートの例を以下に示します <blocked-process-report> …

3
IN()を使用してクエリのパフォーマンスを改善する
次のSQLクエリがあります。 SELECT Event.ID, Event.IATA, Device.Name, EventType.Description, Event.Data1, Event.Data2 Event.PLCTimeStamp, Event.EventTypeID FROM Event INNER JOIN EventType ON EventType.ID = Event.EventTypeID INNER JOIN Device ON Device.ID = Event.DeviceID WHERE Event.EventTypeID IN (3, 30, 40, 41, 42, 46, 49, 50) AND Event.PLCTimeStamp BETWEEN '2011-01-28' AND '2011-01-29' AND Event.IATA LIKE '%0005836217%' ORDER BY Event.ID; …

2
巨大なテーブルのパフォーマンスチューニング(SQL Server 2008 R2)
背景: UATフェーズにファクトテーブルがあります。Prodに5年間のデータをロードする目的(予想されるサイズ4億Mnレコード)現在、テストのデータはわずか2年です。 テーブルの特徴: 次元数〜45 対策〜30 非加法メジャーとその他の列〜25 現在のデータサイズ〜2億(2年間のデータ) タイムビュー:3つの異なる月ビュー:会計/カレンダー/調整(つまり、同じ行が探しているビューに基づいて異なる月に分類される場合があります) ユーザーが一度に必要とするビューは1つだけです。(つまり、クエリで使用されるのは1つのMonth列のみです。これにより、時間表示でパーティション分割ができなくなります) インデックス:Natural Keysに1つのクラスター化インデックス(8列)。ディメンションSK(FK)とすべてのメジャーを含む各Month列に1つずつ非クラスター化インデックスをカバーする3つを作成しました。 このため、インデックスは巨大です(合計190 GB)。 スペースに制約はありません(1 TBが割り当てられています) サーバーで使用可能な64 GBのRAM。 テーブルの圧縮も完了しました。 要件: このファクトテーブルのクエリは、30秒以内に結果を返す必要があります(一般的なクエリは、Dim値でいくつかのDimsグループに参加するsum(measure)を選択します)。レポートは、このファクトテーブルの上で直接行われます。 問題: インデックスで使用可能な列を含むクエリはすべて正常に機能しますが、インクルードにない他の列を含めると.. 5〜10分以上かかります。選択したディメンション/列でうまく機能するソリューションを提案できますか?この状況でインデックスビューは役立ちますか?

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