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

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

1
MSDBデータベースはなぜ信頼できるのですか?
TRUSTWORTHY注意しないと、この設定はかなり危険になる可能性があり、特定の状況を除いて、オフにしておくことをお勧めします。ただし、デフォルトでは、MSDBデータベースはデフォルトでTRUSTWORHTY設定さONれています。なぜだろう? このエントリをBOLで読みました 注デフォルトでは、MSDBデータベースのTRUSTWORTHY設定はONに設定されています。この設定をデフォルト値から変更すると、MSDBデータベースを使用するSQL Serverコンポーネントで予期しない動作が発生する可能性があります。 しかし、私は詳細に興味があります。なぜ具体的にオンにMSDBする必要TRUSTWORTHYがあるのですか?どの関数がそれを使用しますか?

1
自己終了を開始するSQL Serverエージェント
先月、私のサーバーの1つでSQL Serverエージェントの問題が発生しています。ランダムに発生する以下のエラーで自動的に停止します。 SQLエージェント出力ファイル [097]メモリリークが検出されました[204バイト] 例外5がファイルe:\ sql9_sp2_t \ sql \ komodo \ src \ core \ sqlagent \ src \ alerter.cppの行403でキャッチされました。自己終了を開始するSQLServerAgent 私はこのエラーをググりましたが、それについて多くの情報を得ませんでした。SQL Serverとエージェントの両方が同じドメインアカウントで実行されています。ただし、問題はSQL Serverエージェントサービスでのみ発生します。 SQL Server構成マネージャーでSQL Serverエージェントサービスを表示することもできません。SQL ServerのエラーログとWindowsイベントビューアのログを確認しましたが、不審なアクティビティは確認されませんでした。 私のメモリ設定は正しく構成されています。サーバーには32GBのRAMがあり、SQL Serverは26GBの最大メモリを使用するように割り当てられています。 システムの詳細: SQL Server 2012 SP2 Std Edition 11.0.5058 64ビット Windows Server 2008 R2 Ent Edition 64ビット SQL Server専用(サーバー上で他のアプリは実行されません) サーバーは数か月前にSQL Server 2005 …

2
オフラインのCPUスケジューラ
新しいクライアントシステムにログオンし、sp_blitzを実行して、何が振動しているかを確認しました。それは私にとって新しいものである「CPU Schedulers Offline」を報告します。 一部のCPUコアは、アフィニティマスキングまたはライセンスの問題のため、SQL Serverにアクセスできません。 十分に公平です。基本クエリを実行します SELECT DOS.is_online , DOS.status , DOS.* FROM sys.dm_os_schedulers AS DOS ORDER BY 1; それは、私が8をVISIBLE OFFLINEに、43をオンラインに設定したことを報告しています。私の知る限り、このクライアントの誰も意図的にCPUアフィニティを設定していません。 私はそれを解き放つことができるかどうかを確認することにしました。プロパティウィンドウを見ると、40のプロセッサが利用可能で、どれもアフィニティを持つように設定されていません。 is_onlineがtrueであるdm_os_schedulersにまだ40の表示が43のエントリがある理由は、好奇心が強いようです。8オフラインのcpu_idは32〜39です。 sys.configurationsが明示的にオンになっていないアフィニティと一致するようです name value value_in_use description affinity I/O mask 0 0 affinity I/O mask affinity mask 0 0 affinity mask affinity64 I/O mask 0 0 affinity64 I/O mask …

2
SQLサーバーのバッチ中止エラーのリスト
SQL Serverでは、XACT_ABORTがオフの場合、いくつかのエラーが現在のステートメントを終了し(たとえば、一部のパラメーターを受け取るストアドプロシージャに不正なパラメーターの数を指定)、一部のエラーはバッチ全体を中止します(たとえば、ストアにパラメーターを指定します)パラメータを取らない手続き)。[参照]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。 私が知りたいのは、どのエラーがバッチアボートであり、どのエラーがステートメントの終了であるかの明確なリストがあるかどうかです。

1
SQL Server 2012で2つの大きな結果セットを比較する最も効率的な方法は何ですか
2つの大きな結果/行セットを比較する最も効率的な方法に対する現在のアドバイスは、EXCEPT演算子を使用することです。以下のこの自己完結型SQLスクリプトは、行サイズが大きくなる(@last値を変更する)と、非常に非効率になります。結合されたテーブルで一意のエントリを見つけようとしましたが、改善はありませんでした。 DECLARE @first AS INT, @step AS INT, @last AS INT; -- This script is comparing two record sets using EXCEPT -- I want to find additions from OLD to NEW -- As number of rows increase performance gets terrible -- I don't have to use two tables. I could …

5
シークを期待しながらスキャンを取得
SELECTステートメントを最適化する必要がありますが、SQL Serverはシークではなく常にインデックススキャンを実行します。これはもちろん、ストアドプロシージャ内にあるクエリです。 CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL AND ( @IsUserGotAnActiveDirectoryUser = …

1
ORDER BYと文字と数字の混合文字列の比較
通常は「自然に」ソートする必要がある数字と文字の混合ストリングである値について、いくつかのレポートを作成する必要があります。たとえば、「P7B18」や「P12B3」など。@文字列は主に文字と数字が交互になったシーケンスです。ただし、これらのセグメントの数とそれぞれの長さは異なる場合があります。 これらの数値部分を数値順にソートしてください。明らかに、これらの文字列値をで直接処理する場合ORDER BY、「P12B3」は「P7B18」の前に来るでしょう。 「P12」。 範囲の比較などもできるようにしたいと思い@bin < 'P13S6'ます。浮動小数点数や負の数を処理する必要はありません。これらは厳密に私たちが扱っている負でない整数になります。文字列の長さとセグメント数は、上限が固定されていないため、潜在的に任意である可能性があります。 私たちのケースでは、文字列の大文字小文字の区別は重要ではありませんが、照合に対応した方法でこれを行う方法がある場合、他の人が便利だと思うかもしれません。これらすべての最も醜い部分は、WHERE句で順序付けと範囲フィルタリングの両方を実行できるようにしたいです。 これをC#で実行している場合、それは非常に単純なタスクです。いくつかの解析を行ってアルファを数値から分離し、IComparableを実装すれば、基本的にはこれで完了です。もちろん、SQL Serverは、少なくとも私の知る限り、同様の機能を提供していないようです。 誰かがこれを機能させるための良いトリックを知っていますか?IComparableを実装し、これを期待どおりに動作させるカスタムCLR型を作成する、あまり公表されていない機能はありますか?私はまた、愚かなXMLトリック(「リストの連結」も参照)に反対していません。また、サーバーでCLR正規表現のマッチング/抽出/置換ラッパー関数も使用できます。 編集: もう少し詳細な例として、データがこのような動作をするようにしたいと思います。 SELECT bin FROM bins ORDER BY bin bin -------------------- M7R16L P8RF6JJ P16B5 PR7S19 PR7S19L S2F3 S12F0 つまり、文字列をすべての文字またはすべての数字のトークンに分割し、アルファベット順または数値順に並べ替えます。左端のトークンが最も重要な並べ替え条件です。先ほど触れたように、IComparableを実装した場合の.NETの簡単な説明ですが、SQL Serverでそのようなことを行う方法(またはその方法)がわかりません。それは確かに私がこれまでに10年ほどの作業で遭遇したものではありません。

2
可用性グループリスナー
AlwaysOn可用性グループを調べています。よく見ると、可用性リスナーグループが単一障害点であるように見えます。リスナーは実際にはどこで実行されますか?別のサーバー、プライマリSQLサーバー、それらすべて? 2番目のデータセンターにアプリケーションスタック全体があるとします。リスナーが両方のサイトで実行され、アプリケーションが独自のローカルコピーをポイントするようにリスナーを構成するにはどうすればよいですか? 私はここで何かが欠けていると確信していますが、私は何がわかりません。

2
SQL実行プランのTOPオペレーションはなぜですか
しばらく探してみたところ、答えが見つからなかったためこの質問を投稿し、似たような質問/回答があった場合は謝罪することにしました。 同じように設定された2つのSQLサーバーで以下のクエリを実行すると、パフォーマンスに影響する異なる実行プランが発生するため、原因を特定する必要があります。 クエリ: SELECT process_id INTO #temp FROM revrep_revenue_fact WHERE process_id = 284 DROP TABLE #temp サーバーAの実行計画 サーバーBの実行計画 サーバーB http://s2.postimg.org/z9fjrfv4n/server_B.png サーバーBの実際の実行計画ではTOPの物理演算があり、その理由を理解しようとしていることがわかります。両方のクエリは、インデックスシークで同じインデックスを使用します。 サーバーAとサーバーBの詳細は次のとおりです サーバーAとBは両方とも Windows Server 2008 R2 Standard Service Pack 1 24GB RAM 64ビットオペレーティングシステム (SELECT SERVERPROPERTY( 'ProductVersion'))を使用して取得したSQL Server 2012のバージョン サーバーA SQLバージョン11.0.3000.0 サーバーB SQLバージョン11.0.5058.0 私たちが試したこと プロシージャキャッシュのクリア インデックスの再構築 統計の更新 行カウントを0に設定 サーバーBの実行プランにTOPがあるのはなぜですか?この単純なクエリの例では実際の問題はありませんが、大きなクエリではTOPのコストが上昇し、パフォーマンスに影響が出ます。これをデバッグする助けがあれば大歓迎ですし、私たちはあなたが助ける必要があるかもしれない追加の情報を得ることができます。

3
Always On可用性グループ、常にユーザーを読み取り専用インスタンスにリダイレクトする
プライマリと読み取りが有効なセカンダリを持つAlways On可用性グループがあります。データベースを使用して、データベースに入れる予定のデータの正確性をチェックする実装チームのユーザーがいます。 ユーザーはデータベースから読み取る権限のみを持っていますが、AGリスナーを介して(SSMSを介して)接続する場合、常にアクティブノードに接続します。 私は彼らに直接読み取り専用インスタンスにアクセスするように試みましたが、彼らは彼らの方法で立ち往生しており、1日か2日後に彼らは再びアクティブノードに戻ってきました。 SQL Serverがこのユーザーを常に読み取り専用のインテントにして、そこにリダイレクトする方法を教えてください。 注:追加の接続パラメーターで 'ApplicationIntent = ReadOnly'を設定しようとしましたが、これはセカンダリノードにリダイレクトされないようであり、新しいスターター用に設定することを忘れるので、理想的なソリューションではありません。 SQL Server 2012 Enterprise、可用性グループ1プライマリ、同期コミット付きの読み取り可能なセカンダリ1。 ユーザーがリンクサーバーに接続したり、他のサーバーを介して接続したりするつもりはありません。ユーザーはSSMS(他のアプリケーションはありません)を介してデータベースに直接接続します。AGリスナー(またはその周辺)が利用可能であれば、そのユーザーをセカンダリノードに誘導できるようにします(読み取りアクセスしかできないため)。プライマリにアクセスしても意味がありません)ユーザーはマシンを移動し、アプリケーションインテントを追加するのを忘れるので、ユーザーは何もする必要がありません。また、それを追加の接続パラメーターに追加しても、常にセカンダリノードに移動するとは限りません。

1
再帰的なSQLクエリのパフォーマンスの問題[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 4年前休業。 私がこの質問をするのはこれで6回目ですが、これも最短の質問です。これまでのすべての試みは、質問自体ではなくブログ投稿に類似したものでしたが、私の問題が本当であることを保証します。それは、1つの大きな主題に関するものであり、この質問に含まれるすべての詳細なしでは、私の問題が何であるか明確ではありません。だからここに行く... 概要 私はデータベースを持っています。これは、データをちょっと豪華な方法で格納することを可能にし、私のビジネスプロセスに必要ないくつかの非標準機能を提供します。機能は次のとおりです。 挿入のみのアプローチを介して実装された非破壊的で非ブロック的な更新/削除により、データの回復と自動ロギングが可能になります(各変更は、その変更を行ったユーザーに関連付けられます) マルチバージョンデータ(同じデータの複数のバージョンが存在する場合があります) データベースレベルの権限 ACID仕様およびトランザクションセーフな作成/更新/削除との最終的な整合性 データの現在のビューを任意の時点まで巻き戻しまたは早送りする機能。 私が言及し忘れていた他の機能があるかもしれません。 データベースの構造 すべてのユーザーデータはItems、JSONエンコードされた文字列(ntext)としてテーブルに保存されます。すべてのデータベース操作は2つのストアドプロシージャGetLatestを介して行われInsertSnashot、GITがソースファイルを操作する方法と同様にデータを操作できます。 結果のデータは、フロントエンドで完全にリンクされたグラフにリンク(結合)されるため、ほとんどの場合、データベースクエリを実行する必要はありません。 データをJsonエンコード形式で保存する代わりに、通常のSQL列に保存することもできます。ただし、全体的な複雑性の負担が増大します。 データの読み取り GetLatest命令形式のデータを使用した結果については、説明のために次の図を検討してください。 この図は、単一のレコードに対して行われた変更の進化を示しています。図の矢印は、編集が行われたベースのバージョンを示しています(ユーザーがオンラインユーザーによって行われた更新と並行して、一部のデータをオフラインで更新していると想像してください。 1つではなく)。 したがって、GetLatest次の入力タイムスパン内で呼び出すと、次のレコードバージョンが生成されます。 GetLatest 0, 15 => 1 <= The data is created upon it's first occurance GetLatest 0, 25 => 2 <= Inserting another version on top of first one …

2
列ストアインデックスのID列
非常に大きなテーブルIMO(約1億3700万行)があり、繰り返しデータやNULL列がたくさんあります。 を含むテーブルを使用してこれを検討することを検討しCOLUMNSTORE INDEXていIDENTITYます。元のテーブルに列があります。これは、すべての行が一意である唯一の列です。 この列を省略するか、含める必要がありますか?テーブルのすべての行をに含めたいとCOLUMNSTORE INDEX読んだことがありますが、最適な候補は、一意でない行がたくさんある列であることも読みました。 これは単に悪い候補COLUMNSTORE INDEXですか? SQL Server 2012を使用しているため、非クラスター化列ストアです。私はこのデータを格納するための可能なより良い方法を探っているところです。更新は存在しませんが、ELTプロセスによって新しい行が定期的に追加されるため、そこで作業が行われると想定しています。一部の人々はこのデータをマイニングして膨大なレポートを生成し、多くの行をスキャンして、サーバーをクロールさせて、コピーを毎日セカンダリサーバーにオフロードすることを余儀なくさせています。

1
大きく異なるキーを持つキーと値のペアのセットを効率的に格納する
さまざまな種類の活動をサイトに関連付けるアプリケーションを継承しました。アクティビティタイプはおよそ100種類あり、それぞれに3〜10個のフィールドの異なるセットがあります。ただし、すべてのアクティビティには、少なくとも1つの日付フィールド(日付、開始日、終了日、予定された開始日などの任意の組み合わせ)と、1つの担当者フィールドがあります。他のすべてのフィールドは大きく異なり、開始日フィールドは必ずしも「開始日」と呼ばれるわけではありません。 アクティビティタイプごとに1つのサブタイプテーブルを作成すると、スキーマが100の異なるサブタイプテーブルになり、扱いにくいので扱いにくくなります。この問題の現在の解決策は、アクティビティ値をキーと値のペアとして保存することです。これは、ポイントを理解するために、現在のシステムを大幅に簡略化したスキーマです。 各アクティビティには複数のActivityFieldsがあります。各サイトには複数のアクティビティがあり、SiteActivityDataテーブルには各SiteActivityのKVPが格納されます。 これにより、(Webベースの)アプリケーションのコーディングが非常に簡単になります。必要なのは、特定のアクティビティのSiteActivityDataのレコードをループし、各行のラベルと入力コントロールをフォームに追加することだけです。しかし、多くの問題があります: 整合性は悪いです。アクティビティタイプに属さないフィールドをSiteActivityDataに配置することは可能です。DataValueはvarcharフィールドであるため、数値と日付を常にキャストする必要があります。 このデータのレポートとアドホッククエリは難しく、エラーが発生しやすく、低速です。たとえば、指定された範囲内の終了日を持つ特定のタイプのすべてのアクティビティのリストを取得するには、ピボットとvarcharを日付にキャストする必要があります。レポートの執筆者たちはこのスキーマを憎んでおり、私は彼らを責めません。 だから私が探しているのは、レポートが簡単になるような方法で、共通のフィールドがほとんどない多数のアクティビティを保存する方法です。これまでに思いついたのは、XMLを使用して疑似非SQL形式でアクティビティデータを格納することです。 Activityテーブルには、各アクティビティのXSDが含まれるため、ActivityFieldテーブルは不要になります。SiteActivityにはキーと値のXMLが含まれるため、サイトの各アクティビティは1行に表示されます。 アクティビティは次のようになります(ただし、完全に具体化していません)。 <SomeActivityType> <SomeDateField type="StartDate">2000-01-01</SomeDateField> <AnotherDateField type="EndDate">2011-01-01</AnotherDateField> <EmployeeId type="ResponsiblePerson">1234</EmployeeId> <SomeTextField>blah blah</SomeTextField> ... 利点: XSDはXMLを検証し、データベースレベルで数値フィールドに文字列を入力するなどのエラーをキャッチします。これは、すべてをvarcharに格納していた古いスキーマでは不可能でした。 Webフォームの構築に使用されるKVPのレコードセットは、 select ... from ActivityXML.nodes('/SomeActivityType/*') as T(r) XMLのxpathサブクエリを使用して、ピボットを使用せずに、開始日、終了日などの列を持つ結果セットを作成できます。 select ActivityXML.value('.[@type=StartDate]', 'datetime') as StartDate, ActivityXML.value('.[@type=EndDate]', 'datetime') as EndDate from SiteActivity where... これは良い考えのように思えますか?このように多数の異なるプロパティセットを格納する他の方法は考えられません。既存のスキーマを保持し、データウェアハウスでクエリしやすいものに変換することも考えていましたが、スタースキーマを設計したことがなく、どこから始めればよいかわかりません。 追加の質問:XSDでを使用して日付データ型を持つタグを定義すると、xs:dateSQL Serverはそれを日付値としてインデックス付けしますか?日付でクエリを実行する場合、日付文字列を日付値にキャストし、インデックスを使用する可能性をなくす必要があるかどうか心配です。

1
PKの圧縮とテーブルの圧縮の違いは何ですか?
データ圧縮はテーブルで設定できます: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED ( SomeId Desc ) ) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE) そしてそれは主キーで定義できます: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY …

1
バックアップファイルにCDCが含まれているかどうかを確認するにはどうすればよいですか?
SQL Server 2008から2014までを使用して、Change Data Capture(CDC)を有効にしてデータベースをバックアップおよび復元する方法を知っていますが、私が探しているのは、フルバックアップファイルをクエリして、CDCデータが含まれているかどうかを確認する方法です。 以下のような方法だろう、何が素晴らしいことだRESTORE FILELISTONLYデータベースからファイルリストを取得しますが、代わりに、リストアがKEEP_CDCフラグを使用する必要がありますかどうかを判断するためにCDCの状態を取得していますか? バックアップにCDCデータが含まれているかどうかを確認する方法はありますか? ありがとう!

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