タグ付けされた質問 「query-performance」

データベースクエリのパフォーマンスや効率の向上に関する質問。

3
サブクエリを追加するとPostgreSQLクエリが非常に遅くなる
150万行のテーブルに対する比較的単純なクエリがあります。 SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 出力: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

3
billions-rows-tableでの遅いクエリ//使用されたインデックス
私は若い開発者であり、データベース(PostgreSQL 9.3)の使用にあまり熟練していないので、本当に助けが必要なプロジェクトでいくつかの問題に遭遇しました。 私のプロジェクトは、デバイス(最大1000台以上のデバイス)からデータを収集することです。この場合、すべてのデバイスが毎秒1つのデータブロックを送信し、1時間あたり約300万行になります。 現在、すべてのデバイスの受信データを格納する1つの大きなテーブルがあります。 CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) データブロックに含めることができる(またはできない)データにはいくつかの種類があるため、テーブルを参照する他のテーブルがありdata_blockます。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 1つのdata_blockに3x dataA、1x dataBがあるが、dataCがない可能性があります。 データは数週間保持されるため、このテーブルには約50億行を格納します。現時点では、テーブルに6億行まであり、クエリには非常に長い時間がかかります。私のselectステートメントは常にクエリを実行し、多くの場合はtime + macもクエリを実行するため、私はtimestampandとmacでインデックスを作成することにしました。 CREATE …

1
PostgreSQL-複数のクエリを同時に実行すると、どのような状況で速度が向上しますか?どのような状況で減速が見られますか?
私はDBAではない人として謙虚にあなたにアプローチします。そして、私の質問は概念的な欠点と「それは地雷に依存している」に満ちていると確信しています。また、私が回答することを選択したすべての人が、私が現在提供できるよりも詳細な方法で多くのことを望んでいることもかなり確信しています。 とはいえ、私は一般的に次のシナリオに興味があります。 2つの重要なクエリがあるとします。 クエリ1の平均所要時間は2分です。 クエリ2の平均所要時間は5分です。 順次実行すると、平均して完了するまでに7分かかると思います。これは妥当ですか? ただし、2つのクエリを同時に実行するとどうなるでしょうか。同時に2つの別々の接続。 どのような条件下でスピードアップが見込めますか?(合計時間<7分) どのような状況下で減速が予想されますか?(合計時間> 7分) さて、1,000個の重要なクエリを同時に実行していると、全体的に速度が低下するという直感があります。その場合、ボトルネックはどこにあるでしょうか?プロセッサー?羊?ドライブ? 繰り返しますが、詳細を知らない限り、質問に正確に答えることはおそらく不可能であることを知っています(私は持っていません)。次の質問をするときに検討するいくつかの一般的なガイドラインを探しています: どのような状況下で、同時クエリによって全体的な速度が向上しますか? どのような状況で同時クエリが全体的な速度低下を引き起こしますか?

1
filesortを回避することは可能ですか?
次のSELECTクエリで「一時的な使用」と「ファイルソートの使用」を回避することはできますか?それを行う方法がわかりません。 top_expireとプログラムの両方でインデックスを追加しようとしましたが、役に立ちませんでした。ORDERBYを使用すると、クエリは1秒以上かかり、ローカルホストでは0.003秒しかありません。 クエリ SELECT ad.*, p.link FROM (SELECT ad.* FROM mod_ad ad JOIN mod_ad_auta auta ON ad.id = auta.ad_id WHERE ad.active != 0 AND ad.usr_active != 0 AND ad.expire > 1371151608 AND ad.cat_id = '1' AND ad.price <= '10000' AND auta.rocnik BETWEEN '1950' AND '2013' AND auta.km BETWEEN '0' AND …

2
クエリのパフォーマンスチューニング
このクエリのパフォーマンスを改善するための支援を求めています。 SQL Server 2008 R2 Enterprise、最大RAM 16 GB、CPU 40、最大並列度4。 SELECT DsJobStat.JobName AS JobName , AJF.ApplGroup AS GroupName , DsJobStat.JobStatus AS JobStatus , AVG(CAST(DsJobStat.ElapsedSec AS FLOAT)) AS ElapsedSecAVG , AVG(CAST(DsJobStat.CpuMSec AS FLOAT)) AS CpuMSecAVG FROM DsJobStat, AJF WHERE DsJobStat.NumericOrderNo=AJF.OrderNo AND DsJobStat.Odate=AJF.Odate AND DsJobStat.JobName NOT IN( SELECT [DsAvg].JobName FROM [DsAvg] ) GROUP …

3
SQLテーブルから数百万行を削除する
2億2000万以上の行テーブルから1600万以上のレコードを削除する必要がありますが、非常に遅いです。 以下のコードをより速くするための提案を共有していただければ幸いです。 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500); SET DEADLOCK_PRIORITY LOW; SET @BATCHSIZE = 4500; SET @ITERATION = 0; SET @TOTALROWS = 0; BEGIN TRY BEGIN TRANSACTION; WHILE @BATCHSIZE > 0 BEGIN DELETE TOP (@BATCHSIZE) FROM MySourceTable OUTPUT DELETED.* INTO MyBackupTable …

2
ほとんどのクエリプランは過去4時間に再作成されました
SQL Serverデータベースのパフォーマンスに問題があります。このツールsp_BlitzCacheを見つけました。コマンドの実行後、次のステートメントが得られました。 過去24時間に92.00%のプランが作成されており、過去4時間に92.00%のプランが作成されています。 問題を特定しましたが(SQL Server Profilerを使用して、StmtRecompileイベントの発生を確認しました)、頻繁に再構築される少数の全文検索クエリのみを見つけることができました。ただし、全文検索クエリは、全クエリの約5%にすぎません。 残りの87%のプランを再現する原因となる提案はありますか? SQL Server 2012(バージョン11.0.6567.0)を持っています。 編集:パフォーマンスカウンターを追加しました +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | Background writer pages/sec | 0 | | SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 | | SQLServer:Buffer Manager | Buffer cache hit ratio base …

2
2つの列を追加するとクエリが応答しない
2つの列を選択に追加すると、クエリが応答しません。列のタイプはですnvarchar(2000)。それは少し珍しいです。 SQL Serverのバージョンは2014です。 プライマリインデックスは1つだけです。 レコード全体はわずか1000行です。 これが以前の実行計画です(XML showplan): 後の実行計画(XML showplan): これがクエリです: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < Batch_Tasks_Queue.Finish_Time and Batch_Tasks_Queue.id <> btq.id and btq.Start_Time is not null and btq.State …

1
再帰的なSQLクエリのパフォーマンスの問題[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 4年前休業。 私がこの質問をするのはこれで6回目ですが、これも最短の質問です。これまでのすべての試みは、質問自体ではなくブログ投稿に類似したものでしたが、私の問題が本当であることを保証します。それは、1つの大きな主題に関するものであり、この質問に含まれるすべての詳細なしでは、私の問題が何であるか明確ではありません。だからここに行く... 概要 私はデータベースを持っています。これは、データをちょっと豪華な方法で格納することを可能にし、私のビジネスプロセスに必要ないくつかの非標準機能を提供します。機能は次のとおりです。 挿入のみのアプローチを介して実装された非破壊的で非ブロック的な更新/削除により、データの回復と自動ロギングが可能になります(各変更は、その変更を行ったユーザーに関連付けられます) マルチバージョンデータ(同じデータの複数のバージョンが存在する場合があります) データベースレベルの権限 ACID仕様およびトランザクションセーフな作成/更新/削除との最終的な整合性 データの現在のビューを任意の時点まで巻き戻しまたは早送りする機能。 私が言及し忘れていた他の機能があるかもしれません。 データベースの構造 すべてのユーザーデータはItems、JSONエンコードされた文字列(ntext)としてテーブルに保存されます。すべてのデータベース操作は2つのストアドプロシージャGetLatestを介して行われInsertSnashot、GITがソースファイルを操作する方法と同様にデータを操作できます。 結果のデータは、フロントエンドで完全にリンクされたグラフにリンク(結合)されるため、ほとんどの場合、データベースクエリを実行する必要はありません。 データをJsonエンコード形式で保存する代わりに、通常のSQL列に保存することもできます。ただし、全体的な複雑性の負担が増大します。 データの読み取り GetLatest命令形式のデータを使用した結果については、説明のために次の図を検討してください。 この図は、単一のレコードに対して行われた変更の進化を示しています。図の矢印は、編集が行われたベースのバージョンを示しています(ユーザーがオンラインユーザーによって行われた更新と並行して、一部のデータをオフラインで更新していると想像してください。 1つではなく)。 したがって、GetLatest次の入力タイムスパン内で呼び出すと、次のレコードバージョンが生成されます。 GetLatest 0, 15 => 1 <= The data is created upon it's first occurance GetLatest 0, 25 => 2 <= Inserting another version on top of first one …

1
FOREIGN KEYに明示的な単一のKEY値を持つMERGE JOIN(INDEX SCAN)を克服する
追加7/11問題は、MERGE JOIN中のインデックススキャンが原因でデッドロックが発生することです。この場合、トランザクションはFK親テーブルでインデックス全体のSロックを取得しようとしますが、以前は別のトランザクションがインデックスのキー値にXロックをかけています。 小さな例から始めましょう(70-461コースのTSQL2012 DBが使用されています): CREATE TABLE [Sales].[Orders]( [orderid] [int] IDENTITY(1,1) NOT NULL, [custid] [int] NULL, [empid] [int] NOT NULL, [shipperid] [int] NOT NULL, ... ) 列[custid], [empid], [shipperid]は、[Sales].[Customers], [HR].[Employees], [Sales].[Shippers]それに応じて相互に関連するパラメーターです。いずれの場合も、親テーブルの参照列にクラスター化インデックスがあります。 ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([custid]) REFERENCES [Sales].[Customers] ([custid]) ALTER TABLE [Sales].[Orders] WITH CHECK ADD CONSTRAINT …

3
Postgresはインデックススキャンではなく順次スキャンを実行しています
約1,000万行のテーブルと日付フィールドのインデックスがあります。結果セットに26項目しかない場合でも、インデックス付きフィールドの一意の値を抽出しようとすると、Postgresは順次スキャンを実行します。オプティマイザがこの計画を選ぶのはなぜですか?そして、私はそれを避けることができますか? 他の答えから、これはインデックスと同じくらいクエリに関連していると思います。 explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) テーブル構造: http=# \d pages Table "public.pages" Column | Type | Modifiers -----------------+------------------------+---------------------------------- pageid | integer | not null default nextval('... …

2
単純なDELETEですが、複雑な実行プラン
この削除を実行すると: DELETE FROM ETLHeaders WHERE ETLHeaderID < 32465870 ... 39,157行を削除します。これは、クラスター化インデックスと主キーであるETLHeaderIDを削除しているため、単純なはずです。しかし、(実行計画によると)361,190行に達し、他のインデックスを使用しているようです。テーブルには、XMLデータ型のフィールドがあります(このDELETEに影響する場合)。 なぜ、どのように私はこのDELETEを高速化できるのでしょうか? 実行計画はこちら:http : //sharetext.org/qwDY テーブルスキーマはこちら:http : //sharetext.org/Vl9j ありがとう

1
SQL Sentry Plan ExplorerはUDFの読み取りをカウントしますか?
次のようなクエリがあります。 select dbo.fn_complexFunction(t.id) from mytable t SQL Sentry Plan Explorerで、クエリプランにUDFを含めるには、SQL SentryでGet Estimated Planを実行する必要があることに気付きました。 「実際のプランを取得」を実行すると、論理読み取りやその他のメトリックにUDFで発生する操作が含まれているように見えません。このような場合、プロファイラーを使用する唯一の回避策はありますか?

4
SQLカウントクエリを高速化できるものは何ですか?
カウント(集計)SQLクエリを実行する場合、これら3つのデータベースシステムで実行時間を短縮できるものは何ですか?スピードアップできるものはたくさんあると思いますが(ハードウェアは1つです)、私は初心者のDBAなので、ここでいくつかの回答を得られると確信しています。約1億5700万行をSQL​​ Serverデータベースに移行しましたが、このクエリは永遠にかかります。しかし、私のソースのNetezzaデータベースでは、数秒かかります。 例えば: Netezza 6: SELECT COUNT(*) FROM DATABASENAME..MYTABLE Oracle 11g: SELECT COUNT(*) FROM MYTABLE SQL Server 2012: SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]

1
MySQL:内部クエリで「ORDER BY」を使用してUNIONを最適化する
同じレイアウトの複数のテーブルで構成されるロギングシステムをセットアップしただけです。 データソースごとに1つのテーブルがあります。 ログビューアについて、私はしたいです UNIONすべてのログテーブル、 アカウントでそれらをフィルタリングし、 ソースを識別するための疑似列を追加し、 時間順に並べ替え、 そして、ページ分割のためにそれらを制限します。 すべてのテーブルにzeitpunktは、インデックス付きの日付/時刻列であるというフィールドが含まれています。 私の最初の試みは: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS l WHERE l.account_id = 730) ORDER …

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