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

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

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 …

1
SQL Server-主キーなしで大きなテーブルをエクスポートする
SQL ServerとMySQLの間で主キーなしで約5億行の大きなテーブルを同期する必要があります。テーブルには、クラスター化された複合非一意インデックスのみがあります。 サーバー間にODBC接続がありますが、約800万行のインポートには約45分かかりました。そのため、いつでも中断が発生する可能性があるため、単一の大きなインポートは無理があると思います。既存のテーブル構造を変更できません。他のテーブルを追加できます。さらに読んだ後、オフセット/フェッチは大きなテーブルのオプションではありません。「選択... where where between ... and ...」は、一意のキーがないためオプションではありません。 すべての行を含むことが保証されているバッチでテーブルをエクスポートするにはどうすればよいですか?私の問題は、クラスター化されたキーが一意ではないため、物理的な行が連続するクエリ間で同じ順序になることを保証しない後の順序付けと、すべての列に時間がかかりすぎる場合の順序付けです。また、ODBCまたはCSVファイルを使用して、バッチをどのように移行することをお勧めしますか?

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。 私が知りたいのは、どのエラーがバッチアボートであり、どのエラーがステートメントの終了であるかの明確なリストがあるかどうかです。

3
Always Onクラスターがクォーラムを失った場合はどうしますか?
私は会社のDR手順を確認していて、Always On Clusterのクォーラムを失う解決策をオンラインで探したときと比較しました。失われたクォーラムの件名に軽く触れるだけの件名クラスタリングvs.トランザクションレプリケーションvs.可用性グループに関する最初のSEの投稿を見つける前に、Googleの結果を3ページ読みました。 クォーラムを失うことは悪いことであり、可能性を減らすためのいくつかの提案がありますが、それでも起こりえます。Always Onクラスターのクォーラムの損失から回復するための最良の方法に対する、ピアレビューされた適切な回答を探しています。

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
SELECT COUNT()クエリ実行プランに左結合テーブルが含まれているのはなぜですか?
SQL Server 2012では、別のテーブルに結合するテーブル値関数があり、この「テーブル値関数」の行数をカウントする必要があります。実行プランを調べると、左側の結合テーブルが表示されています。どうして?左結合テーブルは、返される行数にどのように影響しますか?私は、dbエンジンがSELECT count(..)クエリで左結合テーブルを評価する必要がないことを期待します。 Select count(realtyId) FROM [dbo].[GetFilteredRealtyFulltext]('"praha"') 実行計画: テーブル値関数: CREATE FUNCTION [dbo].[GetFilteredRealtyFulltext] (@criteria nvarchar(4000)) RETURNS TABLE AS RETURN (SELECT realty.Id AS realtyId, realty.OwnerId, realty.Caption AS realtyCaption, realty.BusinessCategory, realty.Created, realty.LastChanged, realty.LastChangedType, realty.Price, realty.Pricing, realty.PriceCurrency, realty.PriceNote, realty.PricePlus, realty.OfferState, realty.OrderCode, realty.PublishAddress, realty.PublishMap, realty.AreaLand, realty.AreaCover, realty.AreaFloor, realty.Views, realty.TopPoints, realty.Radius, COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as …

1
プロファイラーなしで、クエリがロックの待機に費やした時間を表示するにはどうすればよいですか?
断続的に時間がかかるクエリを診断しようとしています。ロックを取得しようとしてブロックされている可能性があります。問題が発生している環境でプロファイラーを使用する権限がありません。 外部プロファイラーを使用せずに、この個々のクエリがブロックされている時間に関する統計を取得する方法はありますか?

1
PAGELATCH_ *待機タイプで待機しているブロックされたセッション?
編集:セッションレポートがブロックされているがPAGELATCH_*、LCK_M_関連する待機タイプではなく、で待機しているのはなぜですか? 以前は、SQLサーバーはブロッキングセッションのみをblocking_session_Id列で報告すると想定していました。ブロックされたセッションが論理ロックを待機していて、などのほかのものがなかった場合PAGELATCH_*。

2
Oracle USING INDEX句に相当するSQL Server
OracleのUSING INDEX句に相当するSQL Server 2008はありますか?具体的には、構成: CREATE TABLE c(c1 INT, c2 INT); CREATE INDEX ci ON c (c1, c2); ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci; Sql Server Documentation on Unique Indexsには、次のように記載されています(強調を追加)。 一意のインデックスは、次の方法で実装されます。 PRIMARY KEYまたはUNIQUE制約 PRIMARY KEY制約を作成すると、テーブルにクラスター化インデックスがまだ存在せず、一意の非クラスター化インデックスを指定しない場合、列に一意のクラスター化インデックスが自動的に作成されます。主キー列はNULL値を許可できません。 これは、主キーに使用するインデックスを指定する方法があることを意味しているようです。

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