データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

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> ... …

1
私の同僚はどのようにして自分のスキーマを手に入れましたか?
次のストアドプロシージャがあります。 テーブルが存在するかどうかを確認し、存在する場合は削除します。 そのテーブルを再度作成します 次に、そのテーブルに約30個のクエリを入力します。 私(DBオーナー)がこのプロシージャを実行すると、すべてが意図したとおりに機能します。Active Directoryのロールを介してこのデータベースに対するDROP / CREATE権限を持っている同僚がそうすると、いくつかの問題が発生します。私の心を揺さぶるものはこれです: テーブルの作成ではdbo、名前の前に明示的に指定されたスキーマがありませんでした。これにより、tableというdomain\cowork_id.table_name_hereテーブルが作成されました。彼の個人スキーマで作成されたテーブルに加えて、彼はデータベースにそのスキーマも持っています(プロシージャを実行する前は存在していませんでした)。 どうした?SQL Server dboが指定されていない場合ではなく、ユーザーのスキーマでテーブルを作成するのはなぜですか?

1
流出をtempdbにソートしますが、推定行は実際の行と等しくなります
最大メモリを25GBに設定したSQL Server 2016 SP2では、1分間に約80回実行されるクエリがあります。クエリにより、約4000ページがtempdbに流出します。これにより、tempdbのディスクで大量のIOが発生します。 あなたが見てとるときにクエリプラン(簡体クエリを)あなたは、推定行数は実際の行数と同じであるが、依然として発生こぼれることがわかります。したがって、古い統計が問題の原因になることはありません。 私はいくつかのテストを行い、次のクエリをTempdbにスピルしました。 select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) しかし、別の列を選択した場合、流出は発生しません。 select startdate --datetime from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) そこで、id列のサイズを「拡大」しようとしました。 select CONVERT(nvarchar(512),id) from SortProblem where [status] ='A' order by SequenceNumber asc option …

2
一時テーブルは、熱心なスプールよりもハロウィーンの問題に対するより効率的なソリューションであるのはなぜですか?
行がターゲットテーブルにない場合にのみソーステーブルから行を挿入する次のクエリを検討してください。 INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK) SELECT maybe_new_rows.ID FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows WHERE NOT EXISTS ( SELECT 1 FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween WHERE maybe_new_rows.ID = halloween.ID ) OPTION (MAXDOP 1, QUERYTRACEON 7470); 考えられる1つの形状には、マージ結合と積極的なスプールが含まれます。ハロウィーンの問題を解決するために、熱心なスプールオペレーターがいます。 私のマシンでは、上記のコードは約6900ミリ秒で実行されます。テーブルを作成するための再現コードは、質問の下部に含まれています。パフォーマンスに不満がある場合は、熱心なスプールに頼るのではなく、一時テーブルに挿入される行をロードしようとするかもしれません。可能な実装の1つを次に示します。 DROP TABLE IF EXISTS #CONSULTANT_RECOMMENDED_TEMP_TABLE; CREATE TABLE #CONSULTANT_RECOMMENDED_TEMP_TABLE ( ID BIGINT, PRIMARY KEY (ID) ); INSERT INTO #CONSULTANT_RECOMMENDED_TEMP_TABLE …


2
10 TBのデータベースのバックアップ/復元に関する質問
10 TBの非常に大きな本番データベースがあります。クラウドサービスへの移行を検討していますが、リスクを理解し、プロセス全体の期間を見積もる必要があります。ネイティブSQL Server 2014 SP2バックアップソリューションを使用して、月に1回データベースをバックアップします。所要時間はほぼ720分-12時間です。圧縮率は5です。これは、バックアップサイズがほぼ2 TBであることを意味します。差分バックアップは累積されるため、フルバックアップと同じくらいの時間とスペースを要するため、1日あたり10分から144ファイルごとにT-logバックアップ(それぞれ200 Mb)を行うことはできません。BIGの質問はこれらすべての統計情報を持っていることです。10TBのデータを含む2 TBのバックアップを復元するのにどれくらい時間がかかるか、誰にもわかりませんか?完全バックアップの期間よりもはるかに長くなりますか?

1
SQL Server DBAとして、メルトダウン/スペクトルの脆弱性について知っておくべきことは何ですか?
この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答やインタラクションを受け入れていません。 聞いていない場合、最近10年間に販売された実質的にすべてのプロセッサに影響を与える一連の関連する脆弱性が最近発見されました。InfoSec.SEでメルトダウン/スペクトルの脆弱性に関する技術的な詳細を確認できます。 SQL Server DBAとして、これについて何を理解する必要がありますか? SQL Server(またはvmファーム)を他の企業と共有しない場合、これはまだリスクですか? これは単なるOSパッチですか?または、この脆弱性に対処するために必要なSQL Server用のパッチ/ホットフィックスはありますか?どのSQL Serverバージョンにパッチが適用されますか? 一部の記事は、特に高度に仮想化された環境で、5〜30%のパフォーマンスへの影響を予測しています。SQL Serverのパフォーマンスへの影響を予測する方法はありますか?

2
SQL Server 2016と2012の挿入パフォーマンス
同じサーバーに2つのSQL Serverインスタンスがあります。 Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)Standard Edition(64ビット) Microsoft SQL Server 2016(SP1-CU5)(KB4040714)-13.0.4451.0(X64)Enterprise Edition(64ビット) sp_configureの結果は、両方のインスタンスで同じです(新しい2016オプションを除く)。 同じディスクフォルダーの両方のインスタンスに新しいデータベースを作成しました。自動成長パラメータは同じです。 統計の自動作成および自動更新オプションはオフになっています。 次に、10000の挿入をヒープにテストしました。 set nocount on go create table dbo.TestInsert ( i int not null, s varchar(50) not null ) declare @d1 datetime, @d2 datetime, @i int set @d1 = getdate() set @i = 1 while @i …

4
TSQLがPOWER(2.、64。)に対して間違った値を返すのはなぜですか?
select POWER(2.,64.)の18446744073709552000代わりに戻ります18446744073709551616。精度は16桁しかないようです(17桁を丸めます)。 精度を明示的にしselect power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))ても、丸められた結果が返されます。 これは、このように16桁の精度で任意にフレークアウトするための非常に基本的な操作のようです。それが正しく計算できる最高はPOWER(2.,56.)、失敗しただけですPOWER(2.,57.)。ここで何が起こっていますか? 本当にひどいのは、select 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;実際に正しい値を返すということです。簡潔さのために。

1
一意のインデックスの更新と統計行の変更カウンター
次の表、一意のクラスター化インデックス、および統計情報が与えられます。 CREATE TABLE dbo.Banana ( pk integer NOT NULL, c1 char(1) NOT NULL, c2 char(1) NOT NULL ); CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk); CREATE STATISTICS c1 ON dbo.Banana (c1); CREATE STATISTICS c2 ON dbo.Banana (c2); INSERT dbo.Banana (pk, c1, c2) VALUES (1, 'A', 'W'), (2, 'B', 'X'), …

2
FILESTREAMインサイダー情報の検索
FILESTREAM機能がMicrosoft SQL Server 2012でアクティブになると、SQL Serverはシステム上に「隠された」共有を作成します。共有は次のように定義されます。 Sharename FILESTREAM_SHARE Path \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE Remark SQL Server FILESTREAM share Maximum users unlimited Users Caching Manual caching of documents Permissions NT-AUTHORITY\Authenticated Users, FULL 名前は、SQL Server構成マネージャーで FILESTREAMを最初に構成するときに指定する共有の名前です。しかし、それは何のためですか? これまでのところ 私はすべての利用可能なFILESTREAMドキュメントを以下から読みます。 FILESTREAM(SQLサーバー) FILESTREAMを有効にして構成する FILESTREAM対応データベースを作成する FILESTREAMデータを保存するためのテーブルを作成する ...および関連するすべて FILESTREAMと他のSQL Server機能との互換性 FILESTREAM DDL、関数、ストアドプロシージャ、およびビュー OpenSqlFilestreamを使用してFILESTREAMデータにアクセスする 紙SQL Server 2008の- SQL Server 2008のFILESTREAMストレージ 記事FILESTREAM(OLTP)---他の多くの資料を参照するミッションクリティカルなOLTPソリューションを設計するためのテクニカルリファレンスガイド ...しかし、その共有とその目的、またはその目的についての言及はありませんでした。名前を入力すると、SQL …

1
Postgresqlでディスクスペースがいっぱいになった場合の対処
postgresql 9.3.10バックエンド(Linux OSに搭載)を備えたDjango Webアプリケーションがあります。ディスクがいっぱいになったエラーが発生したため、テーブルを切り捨てようとしても、次のようなエラーが発生します。 ERROR: could not extend file "base/30137/33186048": No space left on device HINT: Check free disk space. サーバーにディスクスペースを簡単に追加することも、このVM上のものを削除することもできません。ただし、切り捨ての候補となるいくつかのテーブルがありますが、今はそれらを切り捨てることもできないようです。 誰も私がここでできることについてアドバイスをくれますか?これは本番サーバーに大きな打撃を与えており、私はここで少し偶然のDBAをしているので、まったく困惑しています。

3
SQL Serverカーディナリティヒント
カーディナリティの推定値をSQL Serverオプティマイザー(任意のバージョン)に「注入」する方法はありますか? すなわち、Oracleのカーディナリティのヒントに似たものです。 私のモチベーションは、クエリオプティマイザーは本当にどれくらい良いのかという記事に基づいています。[1]、彼らは悪い計画の選択に対するカーディナリティ推定量の影響をテストします。したがって、複雑なクエリに対して正確にカーディナリティを「推定」するようにSQL Serverに強制できれば十分です。 [1] Leis、Viktor、et al。「クエリオプティマイザーはどれほど優れていますか?」 VLDB Endowment 9.3(2015):204-215の議事録。

1
INSERTでWITH TABLOCKを使用する利点
状況INSERT INTO <tablename> (WITH TABLOCK)によっては、ロギングが最小限であるため、実行が高速になります。これらの状況には、BULK_LOGGED復旧モデルにデータベースを含めることが含まれます。 データベース(tempdb)が復旧モデルを使用しているときに、空のテーブルで使用することWITH TABLOCKでパフォーマンス上の利点は他INSERTにありますか?SIMPLE SQL Server 2012 Standard Editionを使用しています。 私のユースケースは、を使用してストアドプロシージャ内に一時テーブルを作成し、すぐにデータを取り込むINSERT...SELECTことです。私はそのようなtempdbの乱用を避けようとしますが、時々必要になります。 私は必要なケースを構築しようとしていますTABLOCK。それは何も傷つけないようで、利益があるかもしれません。コードベースのどこにでもそれを追加するのに十分な潜在的な利点があるかどうかを把握しようとしています。テーブルに書き込みたい他のプロセスがないと確信しています。 通常、クラスター化されたPKで新しく作成されたローカル一時テーブルに挿入しますが、時々ヒープを使用します。

2
postgresの遅延可能な一意のインデックス
alter tableのpostgresのドキュメントを見ると、通常の制約はDEFERRABLE(より具体的には、INITIALLY DEFERRED、これが私が興味を持っていることです)。 次の条件を満たしている限り、インデックスを制約に関連付けることもできます。 インデックスには式列を含めることも、部分インデックスにすることもできません そのため、現在、次のような条件付きの一意のインデックスを作成する方法はないと考えています。 CREATE UNIQUE INDEX unique_booking ON public.booking USING btree (check_in, check_out) WHERE booking_status = 1; であるためにINITIALLY DEFERRED(場合一意「制約」は唯一のトランザクションの最後に検証されることを、意味し、SET CONSTRAINTS ALL DEFERRED;使用されています)。 私の仮定は正しいですか、もしそうなら、意図した動作を達成する方法はありますか? ありがとう

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