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

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

3
Microsoft SQL Server 2008では、構文により「Parallel Data Warehouse(PDW)機能が有効になっていません」というエラーが生成されます。
並べ替えられたパーティションの集計から生成された次の仮想列があります。 MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC ) しかし、それを実行すると、次のようになります。 Msg 11305, Level 15, State 10, Line 12 The Parallel Data Warehouse (PDW) features are not enabled. これは興味深いところですが、パーティションに並べ替え順序がなくても機能します。 MIN(picture_id) OVER ( PARTITION BY [360_set] ) さらに、ROW_NUMBER()ウィンドウ関数(集計関数ではない)は、パーティションで明示的な順序で動作します。 ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC ) …

1
XML列のINおよびNOT IN
xml列を持つテーブルがあります。Xmlは <Root> <Row> <user>abc</user> <Rowid>1</Rowid> </Row> <Row> <user>vf</user> <Rowid>2</Rowid> </Row> <Row> <user>ert</user> <Rowid>3</Rowid> </Row> <Maxrowid>3</Maxrowid> </Root> 次に、以下のクエリは、ノード 'user'()に値 'abc'または 'xyz'を含むxml列を含む行のsl_no列とmyxmlcolumnを返します。クエリの下では、SQLのINオプションに似ています。 SELECT [mytable].[Sl_no], [mytable].[myxmlcolumn] FROM [mydb].dbo.[mytable] WHERE [myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0 SQL 'NOT IN'と同じように機能する同様のクエリが必要です。それは私の場合、xml列のノード「user」()に「abc」または「xyz」の値がない行が必要です。だから私を助けてください。

1
SQL Serverは使用可能なメモリを使用していません
Windows 2008R2 Enterprise上のSQL Server 2008 R2 Standard Edition(64ビット) サーバーには300 GBを超えるメモリがありますが、コントロールパネルの合計メモリ使用量が86 GBを超えることはありません 最大量のメモリを使用するようにSQLを構成する 頻繁に使用する場合でも-CPUが80%以上分 専用SQLサーバー いくつかの大きなデータベース 頻繁に使用される1つのテーブルのインデックスサイズだけで10 GBを超える メモリにロックを保持するようにサービスアカウントを設定する それは正常ですか? 何をテストできますか? SQL Serverでより多くのメモリを使用できますか?


2
使用可能なすべての列を使用していない述語を探す
再現が難しい奇妙なクエリコンパイルの問題があります。これは高負荷でのみ発生し、簡単に繰り返すことはできません。 列A、B、C、Dを持つテーブルTがあります。 T(A、B、C、D)に一意でないクラスター化インデックスがあります。 クエリSELECT * FROM T WHERE A = @ P1 AND B = @ P2 AND(C = @ P3 OR C = @ P4)AND D = @ P5があります。シーク条件はクラスター化インデックスのすべての列にあり、3番目の列にはORがあります。 問題は、このクエリのクエリプランにはAとBのみにシーク述語があることです。CおよびDの述語は通常の述語であるため、列CおよびDの検索ツリーは使用されません。 すべてのパラメーターのデータ型は、列のデータ型と一致します。 なぜこれが起こり得るのかについてのヒントを誰かが提供できますか?SQLバージョンは2008 R2(SP1)-10.50.2789.0(X64)です

1
特定のアプリケーションに対してのみトリガーコードを実行させる方法は?
テーブルに対して実行されたSQLではなく、現在のアプリケーションに対してのみトリガーを有効にできるかどうか疑問に思っていました。 状況: 同じデータベースで作業している2つのアプリケーションがあります。App1およびApp2。 「MyTable」にトリガーがあります。これは、App1がクエリを実行しているときにのみ起動し、App2が実行しているときは起動しないようにします。

1
デタッチ/アタッチまたはオフライン/オンラインは、特定のデータベースのバッファキャッシュをクリアしますか?
私の友人は今日、SQL Serverをバウンスする代わりに、データベースをデタッチしてから再アタッチするだけで、このアクションにより、指定されたデータベースのページとプランをキャッシュからクリアできると私に言った。私は同意せず、以下の証拠を提供します。あなたが私に同意しない場合、またはより良い反論がある場合は、必ずそれを提供してください。 このバージョンのSQL ServerでAdventureWorks2012を使用しています。 SELECT @@ VERSION; Microsoft SQL Server 2012-11.0.2100.60(X64) Windows NT 6.1(Build 7601:Service Pack 1)上のDeveloper Edition(64ビット) データベースをロードしたら、次のクエリを実行します。 まず、ここにあるJonathan KのAW肥大化スクリプトを実行します。 AW Get Fat --------------------------- -ステップ1:Bpool Stuff? --------------------------- USE [AdventureWorks2012]; 行く 選択する OBJECT_NAME(p.object_id)AS [ObjectName] 、p.object_id 、p.index_id 、COUNT(*)/ 128 AS [バッファサイズ(MB)] 、COUNT(*)AS [buffer_count] から sys.allocation_units AS a INNER JOIN sys.dm_os_buffer_descriptors AS …

1
-E起動オプションとSSD
-ESSDを使用した場合の影響の証拠を見た人はいますか? 「回転する錆びる」ドライブへの影響については異論はありませんが、SSDはランダムI / Oによって影響を受けることはありません。この-Eオプションはパフォーマンスに悪影響を与える可能性があるのでしょうか。 ドライブ(SSD SAN、PCI SSD、および従来のSAN)が混在するサーバーでは、SQL Serverは使用するかどうかを起動時に決定する-E必要があります。このオプションがパフォーマンスに悪影響を与える可能性があることを示すいくつかの経験的証拠がありますが、削除する前に、他の人のフィードバックをお願いします。 私のセットアップでは標準の64K RAIDストライプを使用しており、NTFSクラスターのサイズも64Kです。

1
#SomeTableを複数回作成および削除することは「合法」ですか?
私のコードは「コヒーレントブロック」として分離されており、長い「構成スクリプト」に何度も挿入できます。使用しているパターンの1つは次のとおりです。 CREATE TABLE #WidgetSetting ( WidgetID bigint not null, Name nvarchar(100) not null, Value nvarchar(max) not null, CreateDate datetime not null ) INSERT VALUES MERGE TABLES DROP TABLE #WidgetSetting しかし、現在SSMSは、オブジェクトがすでにCREATE TABLE火災が発生するまでにすでに存在していると不平を言っています。何ができますか? スクリプトの最初に一度テーブルを宣言し、ドロップではなく切り捨てる必要があるのは明らかだと思いますが、当然のことながら、テーブルをドロップして同じ名前を再び使用するのは簡単ではありません。

2
デフォルト制約の名前変更を自動化するスクリプトを生成します
背景:デフォルトの列制約の一部は明示的な名前なしで生成されたため、次のようにサーバーごとに異なる楽しい名前が付けられます。 DF__User__TimeZoneIn__5C4D869D すべてを一貫した命名で管理DF_Users_TimeZoneInfoできるようにして、適切な制約が将来のターゲットテーブルに存在することを確認できるようにします(RedGateの比較のように、または視覚的にも)。 私は主に私が望むもののために働くスクリプトを持っています: select 'sp_rename N''[' + s.name + '].[' + d.name + ']'', N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';' from sys.tables t join sys.default_constraints d on d.parent_object_id = t.object_id join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id join sys.schemas s on …

2
TempDBをCPUの数に等しい複数のファイルに分割する
記事「SQL Server tempdbのベストプラクティスパフォーマンスの向上」ではtempdb、コアの数に等しい数のファイルに分割する必要があることを示唆しています。したがって、4つのコアで4つのファイルを取得します。 ファイル数を増やすことで、SQL Serverが一度にディスクにプッシュできる物理I / O操作の数を増やすことができます。SQL ServerがディスクレベルにプッシュダウンできるI / Oが多いほど、データベースの実行が高速になります。標準データベースでは、SQL Serverは必要な大量のデータをメモリにキャッシュできます。tempdbは書き込みの性質が高いため、メモリにキャッシュする前に、データをディスクに書き込む必要があります。 理論的には良さそうに聞こえますが、それは一般的な最適化として本当にそれでいいのでしょうか IOが非常に高い特定のシステムにのみ適用されるものですか?

2
SQLサーバーでこれらのディスクをBI構成用に構成するにはどうすればよいですか?
一定メモリ(32GB)とCPU(4)、2 xディスクアレイを想定すると、次のディスクがあります 2 x 150(10,000) 6 x 150(15,000) これらはすべてローカルディスクです。 私の要件 私のDBは350GBであり、デフォルトの10%増加に設定されています 私のOSとSQL Serverはサーバー2k8R2です(C:ドライブOS +ページ+アプリケーション= 55Gb) ログ要件は約70GBで、デフォルトの10%の増加に設定されており、定期的に切り捨てられます 私のTempDbは現在約12GBで、デフォルトの10%増加に設定されています 私の問題は、TempDBとOSおよびログをどこに配置すべきかを理解しようとしていることです。私の経験は、これら2つの最適な構成では制限されています これはオンライントランザクションシステムではありません。大量のデータの書き込み(新しいデータ+インデックスの再構築/再編成)と、大量のデータの読み取り(約50/50と見積もっています)処理が約13時間あり、その後は静かです。 私の理解では、TEMPDBはログと比較して通常の処理中に頻繁に使用されます。 私の考えは次のとおりです 2 x 150g(15k)RAID 1 = 150g for OS + TempDB 2 x 150g(10k)RAID 1 = 150g(LOGより遅いディスクに注意) 4 x 150g(15k)RAID 5 = 150g(データ用) これは良い考えのように聞こえますか?その後、必要に応じてLog + TempDBを交換できます。 ページングの問題によりTempDBをOSディスクに配置しない、またはデータよりも遅いディスクにログを配置しないなどの基本的なルールに違反していますか? 編集: また、システムにはSSASがあり、エンドユーザーはキューブにのみアクセスします。上記の50%の読み取りは、SSASデータベースの処理にかかる時間に基づいています。

3
SQL更新の処理に非常に長い時間がかかる/ディスク使用率が高い
はい、それは非常に一般的な問題のように聞こえますが、私はまだそれをあまり絞り込むことができませんでした。 したがって、SQLバッチファイルにUPDATEステートメントがあります。 UPDATE A SET A.X = B.X FROM A JOIN B ON A.B_ID = B.ID Bには40kレコード、Aには4Mレコードがあり、A.B_IDを介して1対nに関連付けられていますが、2つの間にFKはありません。 したがって、基本的にはデータマイニングの目的でフィールドを事前に計算しています。この質問のためにテーブルの名前を変更しましたが、ステートメントは変更しませんでした。それは本当に簡単です。 実行には数時間かかるため、すべてをキャンセルすることにしました。DBが破損したので、それを削除し、ステートメントを実行する直前に行ったバックアップを復元し、カーソルで詳細に進むことにしました。 DECLARE CursorB CURSOR FOR SELECT ID FROM B ORDER BY ID DESC -- Descending order OPEN CursorB DECLARE @Id INT FETCH NEXT FROM CursorB INTO @Id WHILE @@FETCH_STATUS = 0 BEGIN …

2
SQL Serverは、再起動するまで時間が経過すると遅くなります
OLAP / OLTPのワークロードが混在するデータベースがあります。クエリは非常にアドホックであり、中間層アプリケーションサーバーで動的に作成されます。サーバーを起動すると、パフォーマンスは許容範囲内ですが、使用可能なすべてのメモリ(30GB)がなくなるまで、メモリ消費量はどんどん増えます。その後、システムはますます遅くなります。 のようなコマンドDbcc freeproccacheは効果がありません。 トランザクションは多くありませんselect * from sys.dm_tran_session_transactions(システムが正常な場合を超えない)。このリストが空の場合もあります。 の最初の結果dbcc memorystatusは VM Reserved 42136628 VM Committed 1487176 Locked Pages Allocated 24994048 Reserved Memory 1024 Reserved Memory In Use 0 SQL Serverを再起動すると、しばらくの間問題が解決します。 この動作の原因は何ですか?どうすればそれを回避できますか? 原因の実際の解決策が難しすぎる場合、DBMSを完全に再起動せずにSQL Serverにすべてのメモリを実際に解放させるコマンドはありますか? サーバーは専用のハードウェア(VMではなく)で実行されています。スケジュールされたジョブがいくつかありましたが、変更なしでしばらく無効にしました。同じサーバー上で実行されている他の中間層アプリケーションがありますが、それらは2GB以下のメモリ、ごくわずかなCPU、ほとんどI / Oを使用しません。そのようなアプリケーションはすべて変更せずに再起動しました。

1
ビューを保存するときにSSMSがコードを書き換えないようにするにはどうすればよいですか?
次のWHEREような句を含むステートメントを使用するビューを作成しています。 WHERE ( col1 IS NOT NULL OR col2 IS NOT NULL ) AND NOT EXISTS (SELECT ...) 実行には平均10秒かかります。ただし、このクエリをビューとして保存しようとすると、SQL Server(またはMS SQL Server Management Studio Client)がクエリを「最適化」して、代わりにこの構造を使用します。 WHERE (col1 IS NOT NULL AND NOT EXISTS (SELECT ...)) OR (col2 IS NOT NULL AND NOT EXISTS (SELECT ...)) クエリを6分以上に減速します。この動作を無効にして、ビューがSQLクエリを正確に使用するようにする方法はありますか?

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