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

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

1
インメモリテーブルのパフォーマンスがディスクベースのテーブルよりも悪い
SQL Server 2014に次のようなテーブルがあります。 CREATE TABLE dbo.MyTable ( [id1] [bigint] NOT NULL, [id2] [bigint] NOT NULL, [col1] [int] NOT NULL default(0), [col2] [int] NOT NULL default(0) ) (id1、id2)はPKです。基本的に、id1は結果のセット(id2、col1、col2)をグループ化する識別子であり、pkはid2です。 私のボトルネックである既存のディスクベースのテーブルを取り除くために、メモリ内のテーブルを使用しようとしています。 テーブル内のデータが書き込まれます->読み取り->一度削除されます。 各id1値には、数千(数十/数十万)のid2があります。 データは、非常に短時間、たとえば20秒の間、テーブルに保存されます。 このテーブルで実行されるクエリは次のとおりです。 -- INSERT (can vary from 10s to 10,000s of records): INSERT INTO MyTable SELECT @fixedValue, id2, col1, col2 …

6
空白(スペース、タブ、改行)を削除する
私は、SQL Serverの2014年だと私は空白が簡単で、スペース、タブまたは改行(両方の可能性があり、列のコンテンツの開始と終了からクリーン空白に必要\nと\r\n)。例えば ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' 等々。 私は最初のケースだけを達成することができました UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) しかし、それ以外の場合は機能しません。

1
SQL Server 2014でクエリプランがパフォーマンスを悪化させる
最近、サーバーをSQL Server 2008R2からSQL Server 2014にアップグレードしました。2008R2で正常に実行されたクエリがありますが、2014年には実行が非常に遅くなり、実行計画が不良です。 私はいくつかのテストを行いました... 2014 DBを2008/2012互換モードに切り替えます。 ページネーションを使用してクエリをテストします。 これらの両方により、クエリはSQL Server 2008R2と同じように高速で実行されました。 SQL Server 2014で計画がなぜそれほどひどく、クエリが長く実行されるのですか? この画像は2つのクエリを示しており、1つは2008R2での実行方法と同じように行番号を使用しており、2つ目は改ページ調整による修正です。どちらも2014年に実行されましたが、どちらも非常に異なりますが、2008年には、2014年に改ページ調整を使用した場合と同じパフォーマンスが得られます。

6
読み取り専用アプリケーションインテントのSSMS登録済みサーバー
現在、AlwaysOnを使用したSQL Server 2014 POCテストに取り組んでおり、ユーザーの1人が、ローカルサーバーグループに登録されているサーバーを使用して、ReadOnly Intent でSSMSの構成を保存することについて質問しました。これにより、ReadOnlyレプリカにアクセスする必要があるたびにエイリアス名を入力する必要がなくなります。 残念ながら、登録されたサーバー内には、通常のオブジェクトエクスプローラーとは異なり、ApplicationIntentオプションを追加するオプションはありません。 RegSrvr.xmlの接続文字列を変更することについて、マイクロソフトからこの記事を見つけました。 https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups 私は彼らの提案を試してみましたが、登録済みサーバーのローカルサーバー経由で接続すると、正しいレプリカノードに接続しませんでした。 読み取り専用の接続ウィンドウのオプション>接続パラメータを使用した場合のオプションは、オブジェクトエクスプローラから罰金を動作します。ただし、接続に加えられた変更は保存されません。 SSMS でReadOnly Intentプロパティを使用して構成を保存するための代替ソリューションを知っている人はいますか?よろしくお願いします。

1
リンクサーバーに対するOPENQUERYの8000文字の制限
OPENQUERYSSRS / SQL Server 2014で実行しようとしているクエリがありますが、次のエラーが発生し続けます。 [...]で始まる文字列が長すぎます。最大長は8000です。 この制限を回避する方法はありますか? 参考までに、リンクされたMySQLサーバーを介してSSRSからクエリを実行しようとしています。

1
HADRワーカースレッドの使用率が高い
HADRプール内の可用性グループのワーカースレッド数が、「通常、レプリカあたり3〜10個の共有スレッドがある」という最小使用量を大幅に超えるのはなぜですか? 1つのケースでは、3つの可用性グループと合計10のデータベースで300以上のスレッドの使用を観察しました。SQL Server 2014 SP1。 私たちのリードは、セカンダリレプリカのバックアップ、プライマリレプリカの高アクティビティ、セカンダリレプリカのレポートです。 AGはVMwareのデータセンターにあります。合計16のスケジューラー、通常のワーカースレッドは200未満の範囲です。サーバーのmax_dopは2です。 3 AG、10 DB、各4レプリカ-プライマリ、2読み取り専用、1読み取り不可。 セカンダリ1つは同期、2つは非同期 大規模なマルチホストクラスター上の物理32コア上の16 vcore。 過剰プロビジョニングはありません。 他の小さいVM 4-8コアは同じ場所に配置されますが、CPUを圧迫しません ワーカースレッドのスパイクが原因でサービス拒否が発生したことが確認されました。AGへのワーカースレッドの帰属は、それらのワーカースレッドのみが制限を超えることができるため、私たちの仮定です。 以下のSQL Server Premier Field Engineerブログからのリンクは、コンテキストで読んでも完全な答えにはなりません。 SQL Server 2012 AlwaysOn可用性グループのワーカースレッド消費の監視 実際のワーカースレッドは、sp_configureの「最大ワーカースレッド」値を超えていますか?

2
SQL Server 2016の高アイドルCPUとクエリは非常に遅い
テスト用に、WinServer2012R2とSQL Server Express 2016を10日以上前にインストールしました。私はこのマシンの唯一のユーザーです。SQL Server 2005の.bakが250MB以下のデータベースは問題なく復元されます。マシンの再起動後、プロセス「SQL Server NT-64ビット」は0%のCPUを使用します。 数分または数時間後、SSMSのCPU使用率 "SQL Server NT-64ビット"からの単純なクエリ(更新/挿入なし!)が突然15%に急上昇し、アイドル状態でもそこにとどまります。その時点から、通常1秒もかからないクエリは、突然2分かかります。実際のクエリ中、CPU使用率は増加しません。この状態では、サーバーは実質的に使用できなくなります。 SQL Serverプロファイラーの接続のみに30秒以上かかります。自分のクエリ以外に、SQLServerCEIP / SQLTELEMETRYからのクエリはごくわずかしかありません(1分あたり最大3つ)。 SQL-Serverを再起動しても解決しません。CPU使用率は15%に戻ります。時間後でもSQL-Serverは回復しません。マシン全体を再起動するだけで問題が解決します。 これは「すぐに使える」インストールなので、小さなデータベースしかなく、クエリはほとんどなく、ユーザーとしての私だけで、おそらくロックはありません。通常のSQL-Serverパフォーマンスの問題に関する多くの記事は、多くのことについて語っていますここでは実際には適用されません。SQL-Serverはようだ独占的にいくつかの内部タスクに集中したいです。 これは、2 GBのRAMと2 GHzのデュアルXeonを備えた仮想マシンです。私はそれにVS2016も搭載しており、非常に高速です。ウイルス対策も、Windows Defenderもありません。もうここで遅れました。明日はsp_whoisactiveを試します。SQL-Serverは何をしているのだろうと本当に思っています... 1 GBの以前のマシンでは、同じDBがSQLServer2005の下で10年間問題なく動作しました... 私はSQLプロファイラーのエキスパートではありません。どこから探したらいいですか?

1
一括挿入後に外部キーが信頼できなくなる
2012互換モードのデータベースを備えたSQL 2014エディションサーバー(12.0.2430.0-SP1はまだありません)(2014に切り替えられるように取り組んでいます...)not trustedデータベースのように一貫してマークされている少数の外部キーオブジェクトがあります。私はそれらをドロップしてNOCHECKオプションなしで再作成しましたが、5〜10分以内に再び信頼できなくなり、CREATEスクリプトを生成すると次のようになります。 ALTER TABLE [dbo].[Points] WITH NOCHECK ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId]) REFERENCES [dbo].[Badge] ([Id]) GO 使用されている作成スクリプトは次のとおりです。 ALTER TABLE [dbo].[Points] ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId]) REFERENCES [dbo].[Badge] ([Id]) GO ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId] GO レプリケーションはなく、サードパーティのツールもありません。データベース上のすべてのDDLステートメントを監視しているため、別のユーザーではありません。 私は制約を細かくチェックできます(WITH CHECK CHECKそれぞれで使用)が、その後すぐに信頼できなくなります。実行される保守ジョブのみが午前AMのOlaであり、これは1日中行われます。 更新: したがって、可能性を絞り込むためにいくつかのトレースを行った後、それBULK INSERTが原因でFKが信頼されなくなる可能性があります。このmsdnの質問は、これがキーが信頼されなくなるための有効なルートであることを示しています。これは私が聞いた最初のルートです。 だから私の質問は、BULK INSERT外部キーのis_trustedステータスを維持できる使用する代替戦略はありますか?1時間に数回実行されるアプリケーションのコンテキストで実行されています。代わりに、開発者に挿入ステートメントをバッチ処理させることもできますが、BULK INSERT必要がない場合は、最終通告を使用しないようにします。

2
外部キーの参照インデックスを変更する
私はこのようなものを持っています: CREATE TABLE T1 ( Id INT ... ,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id] ) CREATE TABLE T2 ( .... ,T1_Id INT NOT NULL ,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id) ) パフォーマンス(およびデッドロック)の理由で、T1に新しいインデックスを作成しました CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id) しかし、どのインデックスがFKを参照しているかを確認すると、クラスター化インデックスを引き続き参照します。 select ix.index_id, ix.name as index_name, ix.type_desc as index_type_desc, …

2
LIKEステートメントでPIVOTすることは可能ですか
テーブルの要素(などCOLUMN LIKE='Value%')でグループ化することはできPIVOTますか?(データベース、インスタンスなどの)さまざまなステータスを含むテーブル[DBT]。[Status]があり、すべてのPRODとTESTの値を単一の値としてピボット/クエリしたくありませんが、それらをグループ化します。 例えば、代わりにステータスの列を有しているとProd、Prod ACC、Prod APP、...など私はのための値を含む1列のみであろうName LIKE 'Prod%'としName LIKE 'Test%'。 これまでのところ: テーブル定義 CREATE TABLE [DBT].[Status]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) …

5
ワイルドカード「[]」を使用して、](角かっこ)とPATINDEXを一致させる
T-SQL †でカスタムJSONパーサーを作成しています。 私のパーサーのために、PATINDEXトークンのリストからトークンの位置を計算する関数を使用しています。私の場合のトークンはすべて1文字で、次のものが含まれています。 {} []:、 通常、与えられたいくつかの文字の(最初の)位置を見つける必要があるときは、次のPATINDEXような関数を使用します。 PATINDEX('%[abc]%', SourceString) この関数はその後、私の最初の位置を与えるaか、bまたはcに-最初に発見される早い方- SourceString。 今、私の場合の問題は]キャラクターに関連しているようです。文字リストで指定するとすぐに、たとえば次のようになります。 PATINDEX('%[[]{}:,]%', SourceString) 関数が一致を見つけられないため、私の意図したパターンは明らかに壊れています。私が最初に脱出する方法が必要ですように見えます]ので、PATINDEX検索文字ではなく、特別なシンボルの一つとして扱い、それを。 私は同様の問題について尋ねるこの質問を見つけました: LIKE演算子と角かっこが必要です ただし、その場合、]単に1文字であり、大括弧なしで指定できるため、大括弧で指定する必要はありません。エスケープ使用しない別の解決策は、だけのために働くLIKEといないためPATINDEX、それが使用しているため、ESCAPE後者によって前者としないことによってサポートされ、副次句を。 だから、私の質問は、ワイルドカードを使用してを探す方法はありますか?]PATINDEX[ ]または、他のTransact-SQLツールを使用してその機能をエミュレートする方法はありますか? 追加情報 上記PATINDEXの[…]パターンで使用する必要があるクエリの例を次に示します。ここのパターンは(多少ではありますが)機能し]ます。文字が含まれていないためです。私もそれを使用する必要があり]ます: WITH data AS (SELECT CAST('{"f1":["v1","v2"],"f2":"v3"}' AS varchar(max)) AS ResponseJSON), parser AS ( SELECT Level = 1, OpenClose = 1, P = p.P, S = SUBSTRING(d.ResponseJSON, 1, NULLIF(p.P, 0) - …

1
インストールメディアなしでSQL Server 2014 Standard Editionをアンインストールする方法
数年間、SQL Server 2014 Standardのコピーを既定のインスタンスとして開発ボックスにインストールしました。私は自分のマシンに標準をインストールしました。これは、MSDNサブスクリプションを介して使用できる無料のライセンスがあったためです。ここで、SQL Server 2014をアンインストールして、SQL Server 2017 Developer Editionをデフォルトのインスタンスにしたいと思います。標準の[プログラムの追加と削除]ワークフローを使用してSQL Server 2014をアンインストールしようとしましたが、どの機能をアンインストールするかを尋ねると、アンインストールメディアを含むディレクトリを指定するよう求められます。残念ながら、MSDNから入手したSQL Server 2014ダウンロードパッケージを保存せず、MSDNにアクセスできなくなりました。Visual Studioもチェックしましたが、SQL Server 2016のみに戻ります。インストールメディアなしでSQL Server 2014 Standardをアンインストールするにはどうすればよいですか? さらなる背景: SQL Server 2014をアンインストールしたいのSTRING_AGGは、Azure SQLデータベースとSQL Server 2017の新機能を使用したいからです。開発環境のセットアップを簡単にするために、ローカル環境の開発接続文字列にドット表記を使用します。接続文字列は次のとおりです。 Data Source=.;Initial Catalog=<Database Name>;Trusted_Connection=True;Connection Timeout=30; ドット表記はデフォルトデータベースに接続します。私の知る限り、SQL Server 2017をデフォルトデータベースにするには、最初にSQL Server 2014をアンインストールする必要があります。ドット表記の接続文字列を使用して、SQL Server 2014をアンインストールせずにSQL Server 2017に接続できる場合は、そのソリューションにも対応できます。

1
マスター/詳細テーブル間のハッシュ結合により、カーディナリティの見積もりが低すぎる
マスターテーブルを詳細テーブルに結合するときに、SQL Server 2014が大きい(詳細)テーブルの基数推定を結合出力の基数推定として使用するようにするにはどうすればよいですか? たとえば、10Kのマスター行を100Kの詳細行に結合する場合、SQL Serverで結合を100K行で推定します-詳細行の推定数と同じです。すべての詳細行に常に対応するマスター行があるという事実をSQL Serverの推定器が活用できるようにするには、クエリやテーブル、インデックス、あるいはその両方をどのように構成すればよいですか?(それらの間の結合は、カーディナリティの推定値を決して減らすべきではないという意味です。) 詳細はこちらです。このデータベースには、マスター/詳細のテーブルのペアがありVisitTargetます。販売トランザクションごとに1つの行があり、トランザクションVisitSaleごとに製品ごとに1つの行があります。これは1対多の関係です。VisitTargetの行が1つで、平均で10件のVisitSale行があります。 テーブルは次のようになります(この質問に関連する列のみを簡略化しています)。 -- "master" table CREATE TABLE VisitTarget ( VisitTargetId int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, SaleDate date NOT NULL, StoreId int NOT NULL -- other columns omitted for clarity ); -- covering index for date-scoped queries CREATE NONCLUSTERED INDEX IX_VisitTarget_SaleDate ON VisitTarget …

1
パーティションビューで削除を実行すると、クラスター化インデックスが挿入されるのはなぜですか?
以下の挿入トリガーがあるパーティションビューがあります(貧弱なパーティション)。DELETEを実行すると、以下のクエリプランが表示されます。 delete from factproductprice where pricedate = '20170725' ビューのトリガー: ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice] INSTEAD OF DELETE AS BEGIN IF @@ROWCOUNT = 0 RETURN; DECLARE @PriceDate DATE SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED IF @PriceDate BETWEEN '20140101' AND '20141231' BEGIN DELETE FROM dbo.FactProductPrice2014 WHERE ProductId IN (SELECT ProductId …

3
主キーの自己結合
N自己結合で構成されるこのクエリについて考えてみます。 select t1.* from [Table] as t1 join [Table] as t2 on t1.Id = t2.Id -- ... join [Table] as tN on t1.Id = tN.Id N個のクラスター化インデックススキャンとN-1個のマージ結合を含む実行プランを作成します。 正直なところ、すべての結合を最適化せずに1つのクラスター化インデックススキャンだけを行う理由はありません。つまり、元のクエリを次のように最適化します。 select t1.* from [Table] as t1 ご質問 結合が最適化されないのはなぜですか? すべての結合が結果セットを変更しないと言うのは数学的に正しくありませんか? テスト済み: ソースサーバーのバージョン:SQL Server 2014(12.0.4213) ソースデータベースエンジンエディション:Microsoft SQL Server Standard Edition ソースデータベースエンジンの種類:スタンドアロンSQLサーバー 互換性レベル:SQL Server 2008(100) クエリは意味がありません。それはちょうど私の頭に浮かんできました、そして私はそれについて今興味があります。 …

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