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

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

1
可用性グループはシームレスなフェイルオーバー(クエリの失敗なし)を提供できますか?
SQL Server 2012で可用性グループ機能をテストしており、プライマリサーバーがセカンダリサーバーにフェールオーバーするときに、約15秒のダウンタイムがあることがわかりました。この間に実行されたすべてのSQLクエリは、フェイルオーバーの移行が完了するまで失敗します。 これを0秒にして、フェールオーバーの移行中にクエリが失敗しないようにする方法はありますか? 言い換えると、失敗中に実行中のクエリを失敗せずにプライマリサーバーにリダイレクトする方法はありますか。フェイルオーバーの移行中に接続しますか? 現在、可用性グループに2台のサーバーをセットアップしています。

1
SSD上のSQL Server 2012のtempdb、mdf、ldfファイルの最適な配置?
これはおそらく非常に自由な質問であり、答えはさまざまである可​​能性がありますが、SSDについて話すときのSQL Server 2012のtempdb、mdf、およびldfファイルの最適な配置は何ですか? 新規購入前は、SQL Server 2012コアファイルとtempdbがインストールされた既存のSSDがあり、7200rpm HDDにmdf / ldfの両方がありました。次に、MDFとLDFを一方に配置するという当初の目的で、2つのSSDを購入しました。 しかし、それをさらに読み取ることから、SSDに関しては、mdfファイルとldfファイル用の個別の物理ディスクは実際には適用されません。正しい? だから、私は次のことを考えていました: SSD 1-SQL Server 2012コアファイルおよびWindows SSD 2-tempdb SSD 3-mdfおよびldf それが違いを生む場合、これは1つのデータベースのみに割り当てられるため、複数のデータベース間で競合は発生しません。 私の "考えている"セットアップは良いですか、それとも単に無駄になっていますか(つまり、tempdbを分離する理由はありません)。

3
SQL Server Management Studioですべてのクエリに対して一度接続する方法は?
SSMSは、プロジェクト内のすべてのクエリに対して接続するように要求します。プロジェクトでそれを使用するすべてのクエリに対して、接続ごとに1回だけ接続する方法はありますか? 以下の回答(2014年3月)では、質問に回答できません。まだ解決策を探しています。

3
SQL Server 2012 Standard Edition-複数のインスタンスとメモリ使用率
RAMが192 GBの1台のサーバー上にSQL Server 2012 Standard Editionの複数のインスタンス(64 GBのメモリ制限がある)がある場合、両方のインスタンスが最初の64 GBのメモリにしかアクセスできないか、または別のインスタンスにアクセスできるかそれぞれが独自の64 GBの「チャンク」を持つことができるように、メモリの一部。 これは、両方のノードが単一のノードにフェイルオーバーする場合のアクティブ/アクティブクラスターの考慮事項です。

1
単一の包含データベースのユーザーを作成する
私はMSSQLでの作業はかなり新しく、現時点では2012バージョンを使用しています。私がやろうとしているのは、包含データベースのユーザーを作成し、そのユーザーにそのデータベースへのアクセスのみを許可することです。 準備済みステートメントを使用して、JavaからこのSQLを呼び出します。


2
SQL ServerはRANGEをサポートすべきではありませんか?
Webサイトを開発し、SQL Serverを少し実行する人として、SQL Serverが結果に特定の範囲の行のみを含める必要があることを示す単純な句をサポートする必要があることは、私には何の問題もないようです。たとえば、行30〜39です。 現状では、SQL Serverにページングを実装することは、主にSQLに焦点を当てていない場合、実際には多くのWeb開発者の能力を少し超えています。 さらに、結合やその他の条件が原因ですでに複雑になっている可能性のあるクエリが大幅に簡略化されます。 それに加えて、ロジックは完全にMicrosoftの制御下にあるため、そのような句は時間の経過とともに内部で最適化される可能性が高くなると私は考えています。 私は少し前に別のフォーラムでこれを取り上げました、そして、多くの返信はこれが望ましくないことを示唆しているようでした。 ページングの既存の技法がそのまま残されることを考えると、そのような句を追加しない理由として考えられるのはどのようなものでしょうか?そして、それは私のような人々にとってとても良いでしょう。 マイクロソフトがこれを行わなかった正当な理由の誰かができますか?

2
SQL Server:すべての列を含むインデックスをカバーしていますか?
私たちのチームは、アプリケーションと関連するデータベースを継承しています。以前の開発者は、すべてのテーブルのすべてのインデックスにINCLUDE句があり、それ以外の場合はキーの一部ではないすべての列を常に追加するというルールを適用しているようです。これらのテーブルには、平均して2〜5個のインデックスまたは一意の制約と外部キーがあります。 アクセスはデフォルトで(常にではないが)すべての列を取得するORMを介して行われるため、データベースでスローされるクエリに関係なく、SELECTのパフォーマンスを向上させることを目的としています。これの副作用は、ストレージ要件の増加(おそらく大幅に増加する)とINSERT / UPDATE / DELETEの追加のオーバーヘッド時間であると予想されます。 問題は、これは賢明な戦略ですか?私たちのチームにはSQL Serverの履歴がありますが、内部の動作について専門家であると考えるメンバーはいません(ただし、この戦略が最適だった場合、今のところデフォルトではないのではないかという質問が出されました)。他にどのような副作用(データベースサーバーのCPU /メモリ/ TempDBの使用など)が予想されますか、または上記の仮定の一部が正しくありませんか? さらに、アプリケーションは、オンプレミスのSQL Server(2012年以降のバージョン)とAzure SQLの両方にインストールできます-この結果として、2つの違い、またはAzureへの追加の副作用に備えておく必要があります。アプローチ?

1
SQLがバッファキャッシュからすべてのページを数分ごとにダンプする
複数のデータベースを実行している単一のSQL2012 SP4ノードがあります。 サーバーには20 GBのメモリが利用可能で、14 GBがSQLに割り当てられています(他にボックスで実行されているものはありません)。 SQLは数分ごとにバッファキャッシュ全体をダンプします。ページの平均余命はゼロになり、バッファキャッシュ記述子はキャッシュに何もないことを示します。 私はリソースモニターの通知を確認しました。通知は数ミリ秒ごとに高/定常/低から跳ね回っています。 RESOURCE_MEMPHYSICAL_HIGH RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICAL_LOW タイムスタンプが数ミリ秒離れています。PLEは基本的に鋸歯状のパターンです。 これは、SQL2012 SP1とこの質問で以前に発生したのを見たことがあります。 バッファーキャッシュ内のSQL Server 2012空きページが使用されていない 私はすでにSP4に更新していますが、同様の問題のようです。 サービスアカウントのLPIMをオンにして、最大メモリ設定をいじってみました。最大メモリを下げると、バッファキャッシュがより頻繁に空になるようです。 次に確認することについてのアイデアはありますか? サーバーのワークロードは文字通り何もありません(ERPシステムでアイテムのリストをスクロールしていますが、キャッシュが再び低下するまでに約40〜50 MBに達します)。 SP1からアップグレードしてこれを修正したので興味深いです。キャッシュが約500MBになりました。それ以来、私は最大メモリ設定を14GBに落としました。 Windowsがパニックに陥り、SQLでのメモリプレッシャーに関する誤った通知をスローしているのではないかと思います。つまり、最大メモリが無制限に設定されているサーバーは問題なく動作しているようですが、数百MBを超えるキャッシュを満たしていないようです。やっと50に... 詳細:尋ねた人のために コア数: 4 データベースサイズ: 80GB エラーログは以下を示します: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 …

2
列が非決定的であるため、計算列を永続化できません
このタイプの質問が行われたのはこれが初めてではありません。 しかし、次のシナリオで永続的な計算列が「非決定的」に作成されるのはなぜですか。答えはいつも同じでしょ? CREATE TABLE dbo.test (Id INT, EventTime DATETIME NULL, PosixTime INT NOT NULL) GO DECLARE @EventTime DATETIME = '20181001 12:00:00' DECLARE @GPSTime INT = DATEDIFF(SECOND, '19700101', @EventTime) INSERT INTO dbo.Test(Id, EventTime, PosixTime) VALUES (1, @EventTime, @GPSTime) , (2, NULL, @GPSTime) GO SELECT * FROM dbo.test GO ALTER TABLE dbo.test …

2
昇順の主要な問題-「静止」というブランドの主要な列-SQL Server
私はデータベースで実行速度の遅いクエリを調査しており、これが古典的な昇順キー問題であると結論付けました。新しい行がほぼ常に挿入され、DBから最新のデータを引き出すための特定のSQLが30分ごとに実行されるため、30分ごとに統計を更新する最初のオプションは、リソースを浪費する可能性があるようです。 したがって、私はトレースフラグ2389を調べましたが、これは原則的には役立つはずですが、先行列を昇順としてブランド化する必要があり、トレースフラグ2388を使用して(PK)インデックス統計を確認すると、先行列が実際に定常としてブランド化されます-同時に更新される他のテーブルのいくつかのPKインデックスのためです。 Stationaryのブランド化の結果に関するガイダンスはそれほど多くないようですが、KB2952101は、挿入の90%未満が古い最大値よりも大きい場合、それはStationaryとして分類されると述べています。すべての挿入は新しい送信であり、最初の列はbigint IDENTITY列であるため、挿入の100%は以前の最大値より大きくなければなりません。 それで、私の質問は、明らかに昇順であるのに、なぜ列がステーショナリーとしてブランド化されるのでしょうか? 毎日実行中のSQLでこの問題を解決するための以前の試み(これは非常にうまく機能しました)により、このテーブルの統計を毎晩更新するジョブがセットアップされました。更新ではFULLSCANが実行されないため、サンプリングされたスキャンで新しい行が欠落することがあり、常に昇順で表示されるとは限りませんか? これに影響を与える可能性があると私が考えることができる他の唯一のことは、特定の期間を超えて行を削除する舞台裏でアーカイブジョブが実行されていることです。これはブランディングに影響を与える可能性がありますか? サーバーはSQL Server 2012 SP1です。 更新:別の日、別の統計情報の更新-同じ静止したブランド。前回の統計更新以降、28049の新しい挿入がありました。各行には、挿入されたときのタイムスタンプがあるため、timestamp <'20161102'であるテーブルからmax(id)を選択すると23313455が得られます。 これらの違いは28049の新しい挿入です。ご覧のように、すべての新しい挿入には新しい昇順キーが(期待どおりに)与えられています。これは、先頭の列を固定ではなく昇順としてブランド化する必要があることを示しています。 同じ期間に、アーカイブジョブによって213,629行が削除されました(古いデータは徐々に消去されます)。行数の削減が定常的なブランディングに貢献する可能性はありますか?私はこれを以前にテストしたことがあり、それが何かの違いをもたらすようには見えませんでした。 更新2:別の日、別の統計が更新され、列に昇順のフラグが付けられます!これに影響する削除に関する理論に従って、私は削除と比較して挿入である更新のパーセンテージをチェックしました、そして昨日の13%は挿入でしたが、過去2日間の挿入は約12%を占めました。それが決定的なものになるとは思いません。 興味深いことに、このメインテーブルに挿入された各行に対して平均4行が挿入され、同時に統計が更新される関連テーブルで、IDENTITY PK列はまだ静止していますか? 更新3:週末に追加の挿入物を取得します。今朝、リーディングコラムはステーショナリーに戻りました。前回の統計更新では、46840の挿入と34776の削除しかありませんでした。 繰り返しになりますが、興味深いことに、上記で説明した関連テーブルには、昇順というブランドの主要な列があります。これを説明できるドキュメントはありませんか? 更新4:約1週間が経過しました。アーカイブジョブによりバックログがクリアされたため、挿入される行数の約3分の2を一貫して削除しています。統計は、すべて同じように比例して更新されているにもかかわらず、関連するテーブル全体で混合結果を示しています。1つは定常を示し、2つは上昇を示しています。

1
I / Oはデータベースでフリーズされ、I / Oは完全なバックアップのログで毎日データベースで再開されました
毎日のように、ログファイルにメッセージが表示されたと言いたいです。 まず、I / Oがデータベース(DatabaseName)でフリーズしましたというメッセージがログに表示されます。メッセージは I / Oはデータベース(DatabaseName)で凍結されています。ユーザーの操作は必要ありません。ただし、I / Oがすぐに再開されない場合は、バックアップをキャンセルできます。 そして、I / OはDatabase(DatabaseName)メッセージで再開されました。 データベース(DatabaseName)でI / Oが再開されました。ユーザーの操作は必要ありません。 そして最後に、このようなメッセージでデータベースのバックアップが成功しました ユーザーの操作は必要ありません それは私の実稼働監査データベースであり、ソフトウェア環境を持つことは次のようなものです: Windows Server 2012 R2 SQL Server 2012 VMware Tools 私の運用データベース「復旧モデル」は「完全」復旧モデルです。そして、SQL ServerのどのログインIDから、メンテナンスプランバックアップがセットアップされました。これには、すべてのデータベースに対する「sysadmin」特権があります。 バックアップには、「メンテナンスプラン」バックアップを通じて、毎日午後4時のような特定のタイムスケジュールで設定されています。また、Always Backupはスケジュールされた間隔で正常に実行されました。 なぜそのような種類のログメッセージがスケジュールバックアップ時に生成されるのですか。この種のメッセージは、私の運用データベースのパフォーマンスに影響しますか?本番データベースの(バックアップ/復元)データの整合性に問題があります。 任意の提案をいただければ幸いです。

2
少量のデータでパーティション化するときに現実的なクエリプランを取得する
パーティション分割を使用して、ロックのためにOLTPシステムエクスペリエンスがブロックされる量を減らし、パーティションIDに基づいて作業テーブルを100個のパーティションに分割します。ただし、テスト中に、実行プランが予想したとおりに選択されていないことがわかりました。 テストシナリオは、300,000件の連絡先レコード(各連絡先のデータは2つのテーブルに分割されています)を持つ単一の顧客であり、すべて単一のパーティションに存在し、顧客のパーティションで500の特定の行を検索するクエリがあります。ハッシュ一致のようなものが計画のかなり早い段階で不要な299,500を排除することを期待しますが、SQL Serverはテーブル全体のレコード数を取得し、すべてのパーティションで平均化することを選択しているようです。処理する多くのレコード。これにより、ネストされたループが選択され、プロセスのかなり後の方で不要なレコードが削除されます。通常、これには、パーティション分割されていないテーブルに対する同じクエリの9倍の時間がかかります。 奇妙なことに、selectにオプション(再コンパイル)を追加すると賢明な計画が得られますが、なぜこれが違いを生むのか途方に暮れています。これはストアドプロシージャではありません。テスト中に、各テストを実行する前にプロシージャキャッシュをクリアします。 この動作は、関係するテーブルが分割されていない場合には見られません。つまり、推定される行数が実際の数と一致するため、毎回適切なプランが選択されます。 この動作についての洞察はいただければ幸いです。 スキーマのセットアップ: USE [Scratch] GO CREATE SCHEMA part GO CREATE PARTITION FUNCTION [ContactPartition](smallint) AS RANGE LEFT FOR VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, …

2
ドメイン管理者がSQL Serverに接続できない
Windows Server 2012 R2ドメインコントローラーとデータベースサーバー(W2K12R2 / SQL Server 2012)があります。 許可されたユーザーグループとして、「ドメイン管理者」グループにsysadmin権限を付与しました。 しかし、どういうわけか、ドメイン管理者はそのSQL Serverに接続できませんが、許可されたユーザーとしてドメイン管理者ユーザーを直接追加すると、機能します。Active Directoryは機能します。RDPログインが機能します。何か不足していますか? グループ「domain-admins」全体へのアクセスを許可する方法を誰かが知っていますか? エラーメッセージは次のとおりです。 サーバー名:SRV-DB エラー番号:18456 シュヴェレグラード:14 ステータス:1 コードの行:65536 イベントログには次のように書かれています(翻訳済み): インフラストラクチャ障害のあるトークンベースのサーバーアクセスのチェック中にエラーが発生しました。 状態は "1"です。domain-adminとしてRDPでそのdb-serverにログオンします。「管理者として実行」でSSMSを明示的に起動する必要があります。その後、「localhost」にアクセスできます。SSMSを管理者として開始しない場合、それはできません。「domain-admins」グループに参加するだけで十分だと思いました。

3
ロックが使用するメモリ
ちょっと不思議ですが、データベースのRAMサイズが128 GBのSQL 2012 Enterpriseエディションの1つは370 GBであり、ロック(OBJECTSTORE_LOCK_Manager)のメモリクラークが使用するメモリの量は7466016 KBを示します。パフォーマンスカウンターを見ても確認できますselect * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)' ただし、クエリを実行すると select count(*) from sys.dm_tran_locks 16個のロックのみが表示されます。つまり、7 GBを超えるロックを使用しているものです。調べる方法はありますか? いったんロック用のメモリが割り当てられたら、SQLはまだそれを割り当て解除していないのですか?過去1時間で、ロックカウントが500を超えていないようですが、ロックメモリは同じままです。 最大サーバーメモリは106 GBです。メモリ内でロックページを使用していないため、過去12時間のメモリログにエラーが発生したり、メモリ不足が発生したりすることはありません。Available MBytesカウンタは、15 GBを超える使用可能なメモリを示しています。 アクティビティモニターは常に待機中のタスクを0と表示するため、明らかにブロックされません。 SQLサーバーのロックには約100バイトのメモリが必要であることを考慮すると、7 GBは大量のメモリであり、誰がそれを使用しているかを調べようとします。 ロックカウントでサーバーダッシュボードレポートのトップトランザクションを実行すると、「現在、システム上でロックトランザクションは実行されていません。ただし、ロックメモリは上記のように表示されます。DBは夜間に最もビジーです。

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