タグ付けされた質問 「system-tables」

8
空のテーブルのデータベースを照会する方法
一部の「開発者」のために、システムで作業していたため、空のテーブルに問題がありました。クラウドへの転送中にいくつかのテーブルがコピーされましたが、それらのテーブルのデータはコピーされていませんでした。 空のユーザーテーブルを見つけるために、システムテーブルに対してクエリを実行したいと思います。MS SQL 2008 R2を使用しています。 助けてくれてありがとう。

2
SSDTでシステムビューを参照していますか?
システムビュー(具体的にはsys.columns)への参照を含むデータベースをSSDTにインポートしました。問題は、プロジェクトをビルドするときに未解決の参照に関する警告が表示されることです MSDNフォーラムで見たところ、既知の問題のようです:http : //social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/5a7026bd-0602-42e6-a639- d73bed903c26 今、私は警告をオフにしたり無視したりできることを知っていますが、実際の解決策を知っている人はいますか? ありがとう

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

1
肥大化したシステムテーブルのパフォーマンスを改善できますか?
背景: 多数のVIEWと非常に多数のSYNONYMを持つ多数のデータベースがあります。たとえば、1つのデータベースには1万個以上のVIEWと2百万個以上のSYNONYMがあります。 一般的な問題:(および一般的なシステムテーブル) を含むクエリはsys.objects遅くなる傾向があります。関係sys.synonymsするクエリは氷河期です。パフォーマンスを改善するために何ができるか疑問に思っています。 特定の例 このコマンドは、サードパーティツールによって実行されます。アプリとSSMSの両方で遅い: exec sp_tables_rowset;2 NULL,NULL 私の質問: この実行を高速化するにはどうすればよいですか? 試したこと:この出力が得られた 場合SET STATISTICS IO ON: (2201538行が影響を受けます)テーブル 'sysobjrdb'。スキャンカウント1、論理読み取り28、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み0。テーブル 'sysschobjs'。スキャンカウント1、論理読み取り53926、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。 基になるシステムテーブルの統計を更新できました。これは、SQL 2008 R2以降の環境で機能しました。 UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN また、インデックスメンテナンスを実行することもできました。これは、SQL 2012以降の環境で機能します。たとえば、実行中sp_help 'sys.sysschobjs'はテーブルのインデックスを識別し、そこからこれらのコマンドを作成して実行します。 ALTER INDEX clst ON sys.sysschobjs REORGANIZE ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE ALTER INDEX nc2 …

2
クエリストア検索を終了しない
最初から私の質問/問題はこの前のものと似ていると言いますが、原因または開始情報が同じであるかどうかわからないため、質問をいくつか詳細に投稿することにしました。 手元の問題: 奇妙な時間(営業日の終わり近く)に、本番インスタンスの動作が不安定になります。 インスタンスのCPU使用率が高い(ベースラインが約30%の場合、約2倍になり、まだ増加し続けていた) 1秒あたりのトランザクション数の増加(ただし、アプリの負荷には変化が見られません) アイドルセッションの数の増加 この動作を表示しなかったセッション間の奇妙なブロッキングイベント(コミットされていない読み取りセッションでもブロッキングが発生していました) 間隔の上位の待機は1位で非ページラッチで、ロックは2位でした。 初期調査: sp_whoIsActiveを使用して、監視ツールによって実行されたクエリが非常に低速で実行され、大量のCPUを取得することを決定したことがわかりました。 その分離レベルはコミットされずに読み取られました。 奇妙な数字が見られた計画を調べました。StatementEstRows= "3.86846e + 010"で、約150 TBの推定データが返されます。 監視ツールのクエリモニター機能が原因であると考えたため、この機能を無効にしました(プロバイダーにチケットを開いて、問題が発生しているかどうかを確認しました) その最初のイベントから、それはさらに数回起こりました。セッションを終了するたびに、すべてが通常に戻ります。 クエリがクエリストアの監視のためにBOLでMSによって使用されるクエリの1つに非常に類似していることがわかります-パフォーマンスが最近低下したクエリ(異なる時点での比較) 同じクエリを手動で実行し、同じ動作を確認します(使用されるCPUが増え続ける、ラッチ待機が増える、予期しないロックなど)。 有罪の質問: Select qt.query_sql_text, q.query_id, qt.query_text_id, rs1.runtime_stats_id AS runtime_stats_id_1, interval_1 = DateAdd(minute, -(DateDiff(minute, getdate(), getutcdate())), rsi1.start_time), p1.plan_id AS plan_1, rs1.avg_duration AS avg_duration_1, rs2.avg_duration AS avg_duration_2, p2.plan_id AS plan_2, interval_2 = DateAdd(minute, …

2
プログラムでテーブルを結合するために必要なすべての結合を見つける
SourceTableとTargetTableを指定して、すべての結合が必要な文字列をプログラムで作成します。 要するに、私はこのような文字列を作成する方法を見つけようとしています: FROM SourceTable t JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn 特定のテーブルのすべての外部キーを返すクエリがありますが、これをすべて再帰的に実行して最適な結合パスを見つけ、文字列を作成しようとすると、制限が生じます。 SELECT p.name AS ParentTable ,pc.name AS ParentColumn ,r.name AS ChildTable ,rc.name AS ChildColumn FROM sys.foreign_key_columns fk JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id JOIN sys.columns rc …

3
SQL Server CDCでの変更の日時のキャプチャ
そこで、本番データベースの1つで変更データキャプチャを使用して調査を開始しました。各変更の日時を知りたいのですが。ウォークスルーやチュートリアルなどを読むと、標準的なアプローチは、LSNを使用してcdc.lsn_time_mappingシステムテーブルに関連付けることです。このアプローチは機能しますが、1日に数十万の変更について話す場合、それほど単純ではなく、効率的でもありません。 テスト環境で、変更トラックテーブルに次の調整を行いました。ALTER TABLE末尾に列を追加するステートメントを発行し、[__ChangeDateTime]それをデフォルト値にしましたGetDate()。アプローチは機能しているようですが、変更の追跡は引き続き正常に機能し、日時が取得されています。 しかし、システムテーブルをいじくり回すと、少し緊張します。 これがMicrosoftが最初から追加したシステムフィールドでない場合は、理由があったはずです。代わりに、LSNからcdc.lsn_time_mappingへのアプローチを選択したので、この方法で独自のハックを作成することで、問題に備えていますか? 更新: テスト中にGetDate()が時々私たちのニーズに対して十分に正確ではないことが発見されました-同じ時間を共有する複数の変更。sysdatetime()およびdatetime2を使用して値をナノ秒に移動することをお勧めします。2008+のオプションのみ明らかに。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.