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

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

5
行間で90日が経過したギャップを再帰的に見つける方法
これは私のC#ホームワールドでは一種の些細な作業ですが、SQLでまだ作成しておらず、セットベース(カーソルなし)で解決することを好みます。結果セットは、このようなクエリから取得する必要があります。 SELECT SomeId, MyDate, dbo.udfLastHitRecursive(param1, param2, MyDate) as 'Qualifying' FROM T どのように機能するか これら3つのパラメーターをUDFに送信します。 UDFは内部的にparamsを使用して、ビューから関連する90日未満の古い行をフェッチします。 UDFは 'MyDate'をトラバースし、合計計算に含める必要がある場合は1を返します。 そうでない場合は、0を返します。ここでは「修飾」と名付けられています。 UDFが行うこと 行を日付順にリストします。行間の日数を計算します。結果セットの最初の行はデフォルトでHit = 1になります。差が最大90の場合、-ギャップの合計が90日になるまで次の行に渡します(90日目が経過する必要があります)。代わりに、結果から行を省略することもできます。 |(column by udf, which not work yet) Date Calc_date MaxDiff | Qualifying 2014-01-01 11:00 2014-01-01 0 | 1 2014-01-03 10:00 2014-01-01 2 | 0 2014-01-04 09:30 2014-01-03 1 | …

1
可用性グループのセカンダリデータベースで大きなクエリを実行すると、プライマリデータベースのトランザクションパフォーマンスに影響しますか?
SSRSおよびTableauのレポート用に、リアルタイムまたはほぼリアルタイムのデータを提供する必要があります。実稼働OLTPシステムが長時間実行されるクエリによって悪影響を受けるのは望ましくありません。可用性グループのセカンダリデータベースで大きなクエリを実行すると、プライマリデータベースのトランザクションパフォーマンスに影響しますか?

2
SQL Serverに使用可能な物理メモリが残っていない場合はどうなりますか?
グーグル検索中に、矛盾する情報を見つけました。 一部のサイトでは、データ用の物理メモリが残っていない場合、SQL Serverは既存のデータをTEMPDBに移動すると述べています(SQL Server:TempDbの説明と推奨事項を参照)。 しかし、他のサイトでは、十分な物理メモリが残っていない場合、オペレーティングシステムがPAGE FILEを使用して物理メモリからデータをそこに移動できると述べています(SQL Serverのページファイルを参照)。 SQL Serverが物理メモリを使い果たしたときにデータを書き込む場所はどこでしょうか?tempdbまたはOSページファイルに?それとも両方とも?

1
インデックス列の非常に大きなテーブルからのSELECT TOP 1は非常に遅いですが、逆順ではありません(「desc」)
強力なサーバーでSQL Server 2014を実行している約1 TBの大規模データベースがあります。数年はすべてうまくいきました。約2週間前に、次のような完全なメンテナンスを行いました。すべてのソフトウェアアップデートをインストールします。すべてのインデックスを再構築し、DBファイルを圧縮します。ただし、実際の負荷が同じ場合、特定の段階でDBのCPU使用率が100%から150%増加するとは予想していませんでした。 多くのトラブルシューティングを行った後、非常に単純なクエリに絞り込みましたが、解決策が見つかりませんでした。クエリは非常に簡単です。 select top 1 EventID from EventLog with (nolock) order by EventID 常に約1.5秒かかります!ただし、「desc」を使用した同様のクエリには常に約0ミリ秒かかります。 select top 1 EventID from EventLog with (nolock) order by EventID desc PTableには約5億行があります。データ型がbigint(Identity列)EventIDのプライマリクラスター化インデックス列(ordered ASC)です。上部のテーブルにデータを挿入する複数のスレッド(より大きなEventID)があり、下部からデータを削除する1つのスレッド(より小さなEventID)があります。 SMSSでは、2つのクエリが常に同じ実行プランを使用することを確認しました。 クラスター化インデックススキャン。 推定および実際の行番号は両方とも1です。 推定および実際の実行回数は両方とも1です。 推定I / Oコストは8500です(高いようです) 連続して実行した場合、クエリコストは両方で同じ50%です。 インデックス統計を更新しましたがwith fullscan、問題は続きました。インデックスを再構築しましたが、問題は半日消えたようですが、戻ってきました。 IO統計をオンにしました: set statistics io on 次に、2つのクエリを連続して実行し、次の情報を見つけました。 (最初のクエリについては、遅いクエリ) テーブル「PTable」。スキャンカウント1、論理読み取り407670、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。 (2番目のクエリ、高速クエリの場合) …

2
SQL ServerがPERSISTED列を定義と一致しないデータで埋めることは合法ですか?
計算列の奇妙な値に関するこの質問をフォローしていPERSISTEDます。そこでの答えは、この振る舞いがどのようになったかについていくつかの推測をします。 私は次を求めています:これは完全なバグではありませんか?されているPERSISTED列は、今までにこのように動作することが許可されていますか? DECLARE @test TABLE ( Col1 INT, Contains2 AS CASE WHEN 2 IN (Col1) THEN 1 ELSE 0 END PERSISTED) --depends on Col1 INSERT INTO @test (Col1) VALUES (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)) SELECT * FROM @test --shows impossible …

1
sysadmin以外のドメインユーザーが所有するSQL AgentジョブからSSISパッケージを実行する
大規模なSSIS展開の一部として、問題なく(SQL Serverエージェント経由で)夜間に実行される2つのSSISパッケージがあります。すべてがWindows認証を使用しており、スケジュールされたジョブはsysadmin(私も)によって所有され、SQL Serverエージェントサービスアカウントとして実行されます。 そのため、データは基本的にsource system ~> transit db ~> staging ~> NDS一晩で処理されます。 私はハンドル、気に2つのSSISパッケージtransit db ~> stagingとstaging ~> NDSデータの特定のセットのために、それぞれの部品。 ドメインユーザー(sysadmin以外)が何かを実行し、source system興味深いデータをにプッシュするtransit dbため、勤務時間中にこの更新されたデータをフェッチして更新する方法が必要NDSです。この人にとって最も簡単な方法は、そのETLは、マクロ対応のExcelブックのボタンをクリックすることで、ODBCを介してSQL Serverに接続し(Windows認証を使用)、ストアドプロシージャを実行します。 ストアドプロシージャは次のようになります。 create procedure dbo.UpdateMaterialInventory as begin execute msdb.dbo.UpdateMaterialInventory; end [msdb]の「姉妹」ストアドプロシージャは次のようになります。 create procedure dbo.UpdateMaterialInventory with execute as 'SqlAgentProxy' as begin execute msdb.dbo.sp_start_job N'NDS-ManualMaterialInventory'; end この[SqlAgentProxy]ユーザーは、ドメインユーザーのログインから[msdb]で作成したWindowsユーザーでexecute、このUpdateMaterialInventoryプロシージャへのアクセス許可を付与しました。これにより、ドメインユーザーににexecute許可を与える必要がなくなりますmsdb.dbo.sp_start_job。 SQL AgentジョブNDS-ManualMaterialInventoryはドメインユーザーが所有し、2つのステップがあり、それぞれ[SQL Server Integration …

3
最も近い値を見つけるためにSQL Serverでクエリを作成する方法
私はテーブルに次の整数値があるとしましょう 32 11 15 123 55 54 23 43 44 44 56 23 OK、リストは続行できます。関係ありません。ここで、このテーブルにクエリを実行し、特定の数のを返しclosest recordsます。numer 32に最も近いレコードを10個返したいとしましょう。これを効率的に達成できますか? SQL Server 2014にあります。

2
サブクエリを使用してSQLを削除する方法
次のコードは、テーブルから重複するレコードを削除するために開発者の1人によって追加されました。 DELETE SubQuery FROM ( SELECT ID ,FK1 ,FK2 ,CreatedDateTime ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber FROM Table ) AS SubQuery WHERE RowNumber > 1 コードをレビューするとき、私はそれが機能しないと仮定しましたが、テスト環境(SQL 2014)でテストするとそれが機能することがわかります! SQLはサブクエリを解決し、レコードを削除する方法をどのように知っていますかtable?

2
SQL Serverの新しいバージョンは不安定ですか?
データベースアーキテクトは、SQL Server 2014には2012年のパフォーマンスと安定性の利点がないため、2012年よりもSQL Server 2014の選択が適切ではないとクライアントに説明しました。私が読んだことはすべてこれと矛盾します。 アーロン・バートランド氏はまったく正反対であり、私がMSから読んだすべてのホワイトペーパーも同意しています。2014年は強化され、2012年に人々が抱えていたAGの問題のいくつかを解決しました。 2012年よりも2014年を選択した場合、見落としている大きな欠点はありますか?

2
SQL Serverシステムテーブルは最適化できますか?
多数のテーブルが作成および削除されるデータベースがいくつかあります。SQL Serverはシステムベーステーブルの内部メンテナンスを行っていないため、時間の経過とともに非常に断片化し、サイズが肥大化する可能性があります。これにより、バッファプールに不必要な圧力がかかり、データベース内のすべてのテーブルのサイズの計算などの操作のパフォーマンスにも悪影響が及びます。 これらのコア内部テーブルの断片化を最小限に抑えるための提案はありますか?明らかな解決策の1つは、非常に多くのテーブルの作成を回避する(またはtempdbですべての一時テーブルを作成する)ことですが、この質問の目的のために、アプリケーションには柔軟性がないとしましょう。 編集:さらなる研究により、この未回答の質問が示されてALTER INDEX...REORGANIZEいます。これは密接に関連しているように見え、何らかの形での手動メンテナンスがオプションである可能性があることを示しています。 初期調査 これらのテーブルに関するメタデータは、次で表示できますsys.dm_db_partition_stats。 -- The system base table that contains one row for every column in the system SELECT row_count, (reserved_page_count * 8 * 1024.0) / row_count AS bytes_per_row, reserved_page_count/128. AS space_mb FROM sys.dm_db_partition_stats WHERE object_id = OBJECT_ID('sys.syscolpars') AND index_id = 1 -- row_count: 15,600,859 -- …

3
EXISTSクエリがインデックスシークの代わりにインデックススキャンを行うのはなぜですか?
いくつかのクエリの最適化に取り組んでいます。 以下のクエリの場合、 SET STATISTICS IO ON; DECLARE @OrderStartDate DATETIME2 = '27 feb 2016'; DECLARE @OrderEndDate DATETIME2 = '28 feb 2016'; SELECT o.strBxOrderNo , o.sintOrderStatusID , o.sintOrderChannelID , o.sintOrderTypeID , o.sdtmOrdCreated , o.sintMarketID , o.strOrderKey , o.strOfferCode , o.strCurrencyCode , o.decBCShipFullPrice , o.decBCShipFinal , o.decBCShipTax , o.decBCTotalAmount , o.decWrittenTotalAmount , o.decBCWrittenTotalAmount …

1
SQL Server 2014 COUNT(DISTINCT x)は、列xの統計密度ベクトルを無視します
以下のためにCOUNT(DISTINCT)〜10億の異なる値を持っている、私は約3万行を持っていると推定ハッシュ集計でクエリプランを取得しています。 なんでこんなことが起こっているの?SQL Server 2012は適切な見積もりを生成しますが、これはSQL Server 2014のバグであり、Connectで報告する必要がありますか? クエリと貧弱な見積もり -- Actual rows: 1,011,719,166 -- SQL 2012 estimated rows: 1,079,130,000 (106% of actual) -- SQL 2014 estimated rows: 2,980,240 (0.29% of actual) SELECT COUNT(DISTINCT factCol5) FROM BigFactTable OPTION (RECOMPILE, QUERYTRACEON 9481) -- Include this line to use SQL 2012 CE -- Stats for …

1
このクエリを実行するには、リソースプールのデフォルトにシステムメモリが不足しています
Windows Server 2012でSQL Server 2014-12.0.2269.0(X64)を使用していますが、メモリの問題が発生しています。かなり「重い」計算を行っているストアドプロシージャを実行すると、10分程度でエラーが発生します。 このクエリを実行するには、リソースプール「デフォルト」にシステムメモリが不足しています。 私のSQL Serverには複数のデータベースがあります(15などですが、常に同時に使用されるわけではありません)。(エラーが発生した後)SQL Serverログファイルを調べましたが、次のような行がたくさんありました。 2015-12-17 12:00:37.57 spid19sリソースプール 'default'のメモリが不十分なため、データベース 'Database_Name'のページ割り当てを許可していません。詳細については、「http://go.microsoft.com/fwlink/?LinkId=330673」を参照してください。 レポートは、各コンポーネントが使用するメモリとともにログに生成されます(私は思う)。レポートを正しく解釈すると、によって大量のメモリが消費されていることがわかりMEMORYCLERK_SQLBUFFERPOOLます。ここでレポートを見つけることができます:http : //pastebin.com/kgmk9dPH また、同じ「結論」を示すグラフを含むレポートを生成しました。 他にも役立つレポートがあります。 ログにもこのエラーが表示されていることに注意してください。 2015-12-17 12:04:52.37 spid70データベースのメモリ負荷のためにページの割り当てに失敗しました:FAIL_PAGE_ALLOCATION 8 サーバーのメモリに関する情報は次のとおりです。 サーバーの合計メモリ:16 Gb SQLサーバーに割り当てられたメモリ:12288 Mb 使用中の物理メモリ(からsys.dm_os_process_memory):9287 Mb それが役立つ場合、サーバーはSharePointデータベースをホストしません。

4
パッケージ内のエラーを見つけるためにSSISDBを照会する方法は?
私はこの質問を見てきました SSIS 2012-T-SQLで現在実行中のパッケージをクエリする方法? 次のスクリプトを提供します。 SELECT E.execution_id , E.folder_name , E.project_name , E.package_name , E.reference_id , E.reference_type , E.environment_folder_name , E.environment_name , E.project_lsn , E.executed_as_sid , E.executed_as_name , E.use32bitruntime , E.operation_type , E.created_time , E.object_type , E.object_id , E.status , E.start_time , E.end_time , E.caller_sid , E.caller_name , E.process_id , E.stopped_by_sid …

3
XPath / XQueryを使用して同じXML要素のすべての値を連結する
次のようなXML値があります。 <R> <I>A</I> <I>B</I> <I>C</I> ... </R> すべてのI値を連結して、単一の文字列として返しますABC...。 これで、XMLを細断し、結果をノードレスXMLとして集計し、結果に適用できる.values('text()[1]', ...)ことがわかりました。 SELECT ( SELECT n.n.value('text()[1]', 'varchar(50)') AS [text()] FROM @MyXml.nodes('/R/I') AS n (n) FOR XML PATH (''), TYPE ).value('text()[1]', 'varchar(50)') ; ただし、次のようなXPath / XQueryメソッドのみを使用してすべてを実行したいと思います。 SELECT @MyXml. ? ( ? ); そのような方法はありますか? この方向で解決策を探している理由は、実際のXMLにも他の要素が含まれているためです。たとえば、 <R> <I>A</I> <I>B</I> <I>C</I> ... <J>X</J> <J>Y</J> <J>Z</J> ... …

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