タグ付けされた質問 「xml」

「eXtensible Markup Language」の略。構造化データを転送するためのテキストマークアップ言語。

2
XMLリーダーを使用した計画の最適化
ここからクエリを実行して、デフォルトの拡張イベントセッションからデッドロックイベントを引き出します。 SELECT CAST ( REPLACE ( REPLACE ( XEventData.XEvent.value ('(data/value)[1]', 'varchar(max)'), '<victim-list>', '<deadlock><victim-list>'), '<process-list>', '</victim-list><process-list>') AS XML) AS DeadlockGraph FROM (SELECT CAST (target_data AS XML) AS TargetData FROM sys.dm_xe_session_targets st JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address WHERE [name] = 'system_health') AS Data CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent) …

1
XMLインデックスを使用した非常に奇妙なパフォーマンス
私の質問はこれに基づいています:https : //stackoverflow.com/q/35575990/5089204 そこで答えを出すために、次のテストシナリオを行いました。 テストシナリオ 最初にテストテーブルを作成し、100.000行を入力します。乱数(0から1000)は、乱数ごとに最大100行になるはずです。この番号はvarchar colに入れられ、XMLの値として使用されます。 次に、OPのような呼び出しを行います。.exist()および.nodes()を使用して、2番目の利点はわずかですが、両方とも5〜6秒かかります。実際に、呼び出しを2回行います。2回目はスワップされた順序で、検索パラメーターをわずかに変更し、フルパスではなく「// item」を使用して、キャッシュされた結果またはプランによる誤検知を回避します。 次に、XMLインデックスを作成し、同じ呼び出しを行います 今-本当に驚いたことは何ですか!- .nodesとの完全なパスがはるかに遅い(9秒)前よりもなく.exist()して、半秒までであるフルパスもダウン約0.10秒です。(一方.nodes()、短いパスの方が優れていますが、それでもはるかに遅れています.exist()) 質問: 私自身のテストをまとめると、XMLインデックスはデータベースを極端に破壊する可能性があります。それらは物事を非常に高速化できますが(s。edit 2)、クエリも遅くなります。それらがどのように機能するかを理解したいのですが... XMLインデックスを作成する必要があるのはいつですか?.nodes()インデックスを使用すると、インデックスを使用しない場合よりも悪くなるのはなぜですか?否定的な影響をどのように回避できますか? CREATE TABLE #testTbl(ID INT IDENTITY PRIMARY KEY, SomeData VARCHAR(100),XmlColumn XML); GO DECLARE @RndNumber VARCHAR(100)=(SELECT CAST(CAST(RAND()*1000 AS INT) AS VARCHAR(100))); INSERT INTO #testTbl VALUES('Data_' + @RndNumber, '<error application="application" host="host" type="exception" message="message" > <serverVariables> <item name="name1"> …

2
LOB_DATA、遅いテーブルスキャン、およびいくつかのI / Oに関する質問
列の1つがXMLデータで、XMLエントリの平均サイズが約15キロバイトのかなり大きなテーブルがあります。他のすべての列は、通常のint、bigint、GUIDなどです。具体的な数値を得るために、テーブルの行数が100万で、サイズが最大15 GBであるとします。 私が気づいたのは、すべての列を選択したい場合、このテーブルからのデータ選択が本当に遅いということです。私がする時 SELECT TOP 1000 * FROM TABLE ディスクからデータを読み取るのに約20〜25秒かかります-結果に順序を付けませんが。コールドキャッシュを使用して(つまり、後にDBCC DROPCLEANBUFFERS)クエリを実行します。IO統計の結果は次のとおりです。 スキャンカウント1、論理読み取り364、物理読み取り24、先読み読み取り7191、lob論理読み取り7924、lob物理読み取り1690、lob先読み読み取り3968 最大15 MBのデータを取得します。実行計画には、予想どおりクラスター化インデックススキャンが表示されます。 クエリ以外にディスクでIOが実行されていません。また、クラスター化インデックスの断片化が0%に近いことも確認しました。これは一般消費者向けのSATAドライブですが、SQL Serverは〜100-150 MB / minよりも速くテーブルをスキャンできると思います。 XMLフィールドが存在すると、ほとんどのテーブルデータがLOB_DATAページに配置されます(実際、テーブルページの約90%がLOB_DATAです)。 私の質問は-LOB_DATAページはサイズだけでなく、テーブルに多くのLOB_DATAページがある場合にSQL Serverがクラスター化インデックスを効果的にスキャンできないため、低速スキャンを引き起こす可能性があると考えるのは正しいですか? さらに広く-そのようなテーブル構造/データパターンを持つことは合理的であると考えられていますか?Filestreamを使用する際の推奨事項では、通常、フィールドサイズがはるかに大きくなるため、実際にはそのような道を行きたくありません。私はこの特定のシナリオに関する良い情報を実際に見つけていません。 私はXML圧縮を検討してきましたが、クライアント上またはSQLCLRで行う必要があり、システムに実装するにはかなりの作業が必要になります。 圧縮を試みましたが、XMLは非常に冗長であるため、(ac#アプリで)XMLを20KBから〜2.5KBに圧縮し、VARBINARY列に格納して、LOBデータページの使用を防ぎます。これにより、テストでSELECTが20倍高速化されます。

4
FOR XMLには文字(0x0000)が含まれているため、データをシリアル化できませんでした
大きなクエリがあり(必要に応じてここに投稿します)、このエラーが表示されます。 メッセージ6841、レベル16、状態1、行1の XMLは、XMLで許可されていない文字(0x0000)を含むため、ノード 'NoName'のデータをシリアル化できませんでした。FOR XMLを使用してこのデータを取得するには、バイナリ、varbinary、またはimageデータ型に変換し、BINARY BASE64ディレクティブを使用します。 私が使用する唯一の部分FOR XMLはここにあります: WHERE (CodFuncionario = Results.CodFuncionario) FOR XML PATH(''), TYPE).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, '') AS [Experiencia] しかし、何node nonameですか?そして、どのようにこの値を探すことができますか:(0x0000) これはサブクエリの1つです(FOR XMLを持っている唯一の部分)。 SELECT [CodFuncionario], STUFF ( ( SELECT ' / ' + CAST ( [DescFuncao] + '-' + [DescTempoExperiencia] AS VARCHAR(MAX) )... FROM [Linked_Server].db.dbo.tblFuncionarioExperiencia T0 INNER …

2
VARCHARからVARBINARYへの変換
パフォーマンスの傾向を監視し、最適化が必要な領域を特定できるように、実行中の高価なクエリのログとクエリプランをテーブルに保存しています。 ただし、クエリプランが多くのスペースを占有するようになります(各クエリに対してプラン全体を保存しているため)。 したがって、QueryPlanHashとQueryPlanを別のテーブルに抽出することにより、既存のデータを正規化しようとしています。 CREATE TABLE QueryPlans ( QueryPlanHash VARBINARY(25), QueryPlan XML, CONSTRAINT PK_QueryPlans PRIMARY KEY ( QueryPlanHash ) ); query_plan_hashin の定義はsys.dm_exec_query_statsバイナリフィールドであるため(また、定期的に新しいデータを挿入します)、VARBINARY新しいテーブルのデータ型に使用していました。 ただし、以下の挿入は失敗します... INSERT INTO QueryPlans ( QueryPlanHash, QueryPlan ) SELECT queryplanhash, queryplan FROM ( SELECT p.value('(./@QueryPlanHash)[1]', 'varchar(20)') queryplanhash, QueryPlan, ROW_NUMBER() OVER (PARTITION BY p.value('(./@QueryPlanHash)[1]', 'varchar(20)') ORDER BY DateRecorded) rownum FROM …

3
SQLサーバーは挿入時にXML構造を変更します
SQLサーバーのXML列にXMLデータを挿入していますが、データが挿入された後、SQLサーバーによって変更されています。ここに私が挿入するデータがあります <xsl:value-of select="name/n/given" /> <xsl:text> </xsl:text> <xsl:value-of select="name/n/family" /> 読み返すとこんな感じ <xsl:value-of select="name/n/given" /> <xsl:text /> <xsl:value-of select="name/n/family" /> 2行目に注意してください。XSLT変換の出力方法が変わるため、これは問題です。最初の例では、名と姓の間にスペースが作成されますが、2番目の例ではスペースが作成されないため、JohnJohnsenのようになり、最初の例ではJohn Johnsenのようになります。 これを解決する方法はありますか?
15 sql-server  xml 

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
この拡張イベントXMLをできるだけ早く細断するにはどうすればよいですか?
SQL Server 2008 R2で拡張イベントセッションを作成しました。セッションが実行され、予想どおりにイベントが発生すると収集されます。 イベントが比較的少ないときにxmlを細断すると、パフォーマンスは許容範囲内になります。何千ものイベントがあるとき、xmlを細断処理す​​るのに時間がかかります。 私は何か間違ったことをしていることを知っています。XMLエンジンの内部について何を理解するのに十分な知識を持っていません。 これは私の拡張イベントセッションの定義です。 IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON SERVER STATE = STOP; END DROP EVENT SESSION queries ON …

2
sp_send_dbmailストアドプロシージャは添付ファイル付きで送信します
私は、顧客の1人に小さな月次レポートを送信するという任務を負っています。レポートは以前にインスタンスで手動で実行され、出力はスプレッドシートにコピーされ、添付ファイルとして顧客に送信されていました。 より永続的なソリューションを探しているのでsp_send_dbmail、クエリを実行して添付ファイルとして送信するためにストアドプロシージャを使用する予定です。 メッセージのフォーマット以外はすべて機能します。最初に、出力をCSVファイルとして添付しようとしました@query_result_seperator = ','が、結果はどこにでもありました! レポートを正常に実行すると、SQLで出力が正常に表示されます。ただし、CSVとして送信したり、メッセージ本文で送信したりすることはできません。 出力をHTMLとしてエクスポートし、添付ファイルまたはXMLとして送信する方がうまくいくと思いますが、これを行う方法がわかりません。 誰か提案はありますか? 前もって感謝します!

1
where句が `value()`でフィルタリングするときにセカンダリ選択インデックスが使用されないのはなぜですか?
セットアップ: create table dbo.T ( ID int identity primary key, XMLDoc xml not null ); insert into dbo.T(XMLDoc) select ( select N.Number for xml path(''), type ) from ( select top(10000) row_number() over(order by (select null)) as Number from sys.columns as c1, sys.columns as c2 ) as N; 各行のサンプルXML: <Number>314</Number> …

4
テーブルなしでデータベースにデータを保存する方法は?
学校で学んだのは、データをテーブルに保存するSQLだけでした。現在、データをXMLファイルに保存するプロジェクトに取り組んでいます。さらに、すべてのXMLにはビジュアルファイル(JPEG)への参照が含まれています。 XML自体には、1,000を超える座標点に加えて、データに関する追加情報が含まれています。 私の意見では、この情報をテーブルに保存しても意味がありません。それに、JPEGファイルをSQLで保存することもできませんでした。 適切な解決策は何ですか、または私の側の推論にエラーがありますか? ご覧のとおり、私はデータベースにはかなり慣れていません。したがって、建設的な提案、リンク、アドバイスは大歓迎です。

3
ファイルからPostgreSQLデータベースにXMLを読み込むSQL
XMLファイルを読み込んでPostgreSQLのXML値にするには、どうすればSQLを記述できますか? PostgreSQLには、テキスト文字列をその型に解析する機能を備えたネイティブXMLデータ型がありXMLPARSEます。また、ファイルシステムからデータを読み取る方法もあります。特にCOPY声明。 しかし、ネイティブのPostgreSQL SQLステートメントを記述して、ファイルシステムエントリからコンテンツを読み取り、それを使用してXML値を設定する方法は見当たりません。これどうやってするの?
12 postgresql  xml 

4
XMLデータ型を使用する場合
プロジェクトでデータベースを作成する責任があります。まれに値を持つフィールド(10,000レコードごとに1つ)があり、これをデータベースに格納する最適な方法を探しています。 私が見る限り、3つのオプションがあります: 余分な値ごとにテーブルに列を追加します 元のテーブルを参照し、値を保存する必要がある場所にのみレコードを持つリンクテーブルを追加します。 元のテーブルのXMLデータ型を使用し、すべての値をこれに保存します。 私が検討していない他のオプションはありますか? 私は各方法の長所と短所を解決しようとしています。私が知る限り、1が最も簡単で、2が最小のスペースで済みますが、3のリソースを見つけるのに苦労しています。


1
SQL ServerクエリプランXML:QueryPlanHashの長さ
更新:これは間違いなくバグです。詳細については、こちらの接続アイテムをご覧ください。 sp_BlitzCacheへのいくつかの変更(完全な開示、私は作成者の1人)をテストしているときに、コードのバグだと思ったものに遭遇しました。 ある時点で、クエリコストを取得するためにクエリプランハッシュを照合しています。私たちはそのようにしています: statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) = xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float') これは、私が見た限りではうまくいきました。ただし、奇妙なケースの1つとして、XMLの部分文字列がNULL値をスローし、プランのコストはかなり高いにもかかわらず、コストが0でした。 掘り下げる実行計画(フル開示は、ホストが計画を貼り付けていること、会社のための私の仕事は)、私は、クエリプランハッシュは一つの問題ハッシュのための残りが18ここである例でありながら、17文字の長さだったことに気づきました。 QueryPlanHash = "0x4410B0CA640CDA89" QueryPlanHash = "0x2262FEA4CE645569" QueryPlanHash = "0xED4F225CC0E97E5"-問題! QueryPlanHash = "0xBF878EEE6DB955EA" QueryPlanHash = "0x263B53BC8C14A452" QueryPlanHash = "0x89F5F146CF4B476F" QueryPlanHash = "0xEF47EA40805C8961" QueryPlanHash = "0xB7BE27D6E43677A5" QueryPlanHash = "0x815C54EC43A6A6E9" クエリプランハッシュはaとしてリストされていますBINARY 8-おそらくこれは常に同じ長さでなければなりませんが、私のような人はバイナリ値について何を知っていますか? XQueryを少し試してみたところ、2番目の位置から開始するように部分文字列を変更すると、有効な(正しくないとしても)ハッシュ値が得られることがわかりました。 WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p) SELECT QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'), **q.n.value('substring(@QueryPlanHash, …

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