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

システムが目的に適合するほど十分に機能するかどうかの評価。通常、パフォーマンスとは、システムが1つの操作または一連の操作を時間の経過とともに完了する速度を指します。

3
更新(ソフトウェアおよびハードウェア)からの重いI / Oのためにデータベースを最適化する方法
状況 は非常に頻繁に更新されるpostgresql 9.2データベースがあります。したがって、システムはI / Oにバインドされており、現在別のアップグレードを検討しています。改善を開始する場所についての指示が必要です。 過去3か月間の状況の様子を次の図に示します。 ご覧のとおり、更新操作はほとんどのディスク使用率を考慮しています。より詳細な3時間のウィンドウで状況がどのように見えるかの別の写真を次に示します。 ご覧のとおり、ピーク書き込み速度は約20MB / sです ソフトウェア サーバーは、ubuntu 12.04およびpostgresql 9.2を実行しています。更新のタイプは、通常、IDで識別される個々の行で小規模に更新されます。例UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。可能な限りインデックスを削除して最適化し、サーバー構成(Linuxカーネルとpostgres confの両方)もかなり最適化されています。 ハードウェア ハードウェアは、32GB ECC ram、RAID 10アレイの4x 600GB 15.000 rpm SASディスクを備えた専用サーバーで、BBUとIntel Xeon E3-1245 Quadcoreプロセッサーを搭載したLSI RAIDコントローラーによって制御されます。 ご質問 グラフに表示されるパフォーマンスは、この口径のシステム(読み取り/書き込み)にとって妥当ですか? したがって、ハードウェアのアップグレードに重点を置くか、ソフトウェアの詳細な調査(カーネルの調整、confs、クエリなど)を行う必要がありますか? ハードウェアのアップグレードを行う場合、ディスクの数はパフォーマンスにとって重要ですか? - - - - - - - - …

2
DELETEがパフォーマンスに長引く影響を与えるのはなぜですか?
最後に、@ table変数と#tempテーブルのパフォーマンスを比較するためのテストスクリプトがあります。私はそれを正しく設定したと思います-パフォーマンスのタイミングはDELETE / TRUNCATEコマンドの外で取られます。私が得ている結果は次のとおりです(ミリ秒単位の時間)。 @Table Variable #Temp (delete) #Temp (truncate) --------------- -------------- ---------------- 5723 5180 5506 15636 14746 7800 14506 14300 5583 14030 15460 5386 16706 16186 5360 念のためGetDate()、バッチではなくステートメントの時点でCURRENT_TIMESTAMP(別名)が取得されることを示しているため、TRUNCATE / DELETEとSET @StartTime = CURRENT_TIMESTAMPステートメントの相互作用はありません。 select current_timestamp waitfor delay '00:00:04' select current_timestamp ----------------------- 2012-10-21 11:29:20.290 ----------------------- 2012-10-21 11:29:24.290 DELETEを使用してテーブルをクリアする場合、最初の実行と後続の実行の間のジャンプは非常に一貫しています。DELETEの理解に欠けているものは何ですか?これを何度も繰り返し、順序を交換し、成長を必要としないようにtempdbのサイズを調整しました。 CREATE TABLE …

2
SQLコンパイルはSQL Serverのパフォーマンスにどの程度影響しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 SQL Server 2005のインスタンスをプロファイリングしていますが、PerfMonのSQLServer:SQL Statistics - SQL Compilations/secメトリックを使用すると、平均が約170程度であることがわかります。 SQLプロファイラーを作成し、SP:CompileまたはSQL:Compileイベントを探しました。どうやら存在しません。私が見つけたStored Procedure/SP:RecompileとTSQL/SQL:StmtRecompileのイベント。プロファイラーに表示されるデータの量は、これらが間違ったイベントであることを示唆していますが、よくわかりません。 だから私の質問。これらのいずれかの答えは素晴らしいでしょう。 SQL Serverで何がコンパイルされているかを正確に確認するにはどうすればよいですか? 間違った指標を選んで調べましたか?PerfmonまたはSQL Profilerのどちらですか? Stored Procedure/SP:RecompileおよびTSQL/SQL:StmtRecompileSQLプロファイラでのイベント...彼らは、期間メトリックが含まれていません。これらのイベントがシステムへのタイミングの影響を確認する方法を提供しない場合、システムへのこれらのイベントの影響をどのように測定できますか。

2
インデックスとパーティション
インデックスのみでパフォーマンスの向上を達成できないのはなぜですか?そのため、テーブルパーティションのような他の手法が必要になりますか?質問はパフォーマンスのみに関連しています。もちろん、異なるパーティションを異なるテーブルスペースに配置することはできますが、これはインデックスでは達成できない他の効果をもたらします。 または言い換えれば、パフォーマンスの面でのみ:テーブルのパーティション分割と同じパフォーマンスの向上を達成することは可能ですか?

2
式の集約LIKEクエリを高速化するためにインデックスを作成する方法は?
タイトルに間違った質問をしている可能性があります。事実は次のとおりです。 カスタマーサービスの担当者は、Djangoベースのサイトの管理インターフェイスでカスタマールックアップを実行すると、応答時間が遅いことに不満を抱いていました。 Postgres 8.4.6を使用しています。遅いクエリのログを記録し始め、この犯人を発見しました: SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%') このクエリは、実行に32秒以上かかります。EXPLAINが提供するクエリプランは次のとおりです。 QUERY PLAN Aggregate (cost=205171.71..205171.72 rows=1 width=0) -> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0) Filter: (upper((email)::text) ~~ '%DEYK%'::text) これは、Django Adminアプリケーションによって生成されたDjango QuerySetからDjango ORMによって生成されたクエリなので、クエリ自体を制御することはできません。インデックスは論理的なソリューションのようです。これを高速化するためにインデックスを作成しようとしましたが、違いはありません。 CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text)) 何が間違っていますか?このクエリを高速化するにはどうすればよいですか?


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倍高速化されます。

3
クエリのパフォーマンスを最適に測定するにはどうすればよいですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 2つのストアドプロシージャがあり、2番目のストアドプロシージャは最初のストアドプロシージャの改良版です。 どれだけ改善されているかを正確に測定しようとしています。 1 / clock time実行時間が異なるため、測定はオプションではないようです。さらに悪いことには、2番目のストアドプロシージャの実行時間が、2番目のストアドプロシージャの実行時間よりも長い場合があります(まれに起こります)(その瞬間のサーバーのワークロードによると思います)。 2 / Include client statisticsは、異なる結果も提供します。 3 / DBCC DROPCLEANBUFFERS、DBCC FREEPROCCACHE良いですが、同じ話... 4 / SET STATISTICS IO ONはオプションかもしれませんが、ストアドプロシージャに多くのテーブルが関係しているので、どうすれば総合スコアを取得できますか? 5 / Include actual execution planもオプションです。estimated subtreecost最初のストアドプロシージャで0.3253を取得し、2番目のストアドプロシージャで0.3079 を取得します。2番目のストアドプロシージャは6%高速(= 0.3253 / 0.3079)と言えますか? 6 / SQL Server Profilerの「読み取り」フィールドを使用していますか? では、実行条件(サーバーのワークロード、これらのストアドプロシージャが実行されるサーバーなど)に関係なく、2番目のストアドプロシージャが最初のプロシージャよりもx%高速であると言えますか? それが不可能な場合、2番目のストアドプロシージャの実行時間が最初のストアドプロシージャよりも優れていることをどのように証明できますか?

5
SQL:CPUまたはIOでない場合、INSERTの速度が低下するのは何ですか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 書き込みが多い製品のデータベースがあります。SSDを備えた新しいサーバーマシンを購入しました。驚いたことに、挿入ははるかに遅いストレージを備えた古いマシンよりも高速ではありませんでした。ベンチマーク中に、SQL Serverプロセスが示すIOレートが非常に低いことがわかりました。 たとえば、ループの周りにBEGIN TRANとCOMMITを追加したことを除いて、このページにあるスクリプトを実行しました。せいぜい、ディスク使用量が7Mb / sに達するのを見ることができましたが、CPUはほとんど5%に触れませんでした。サーバーには64Gbがインストールされており、10を使用しています。合計実行時間は、最初の呼び出しでは2分15秒、その後の呼び出しでは約1分でした。データベースは単純なリカバリであり、テスト中はアイドル状態でした。各呼び出しの間にテーブルを削除しました。 なぜこのような単純なスクリプトがそんなに遅いのですか?ハードウェアはほとんど使用されていません。専用ディスクベンチマークツールとSQLIOの両方は、読み取りと書き込みの両方でSSDが500Mb / s以上の速度で正しく実行されることを示しています。ランダム書き込みはシーケンシャル書き込みよりも遅いことを理解していますが、クラスター化インデックスを持たないテーブルへのこのような単純な挿入は、はるかに高速になると予想されます。 最終的に、このシナリオははるかに複雑ですが、最初に単純なケースを理解する必要があると感じています。簡単に言うと、アプリケーションは古いデータを削除し、SqlBulkCopyを使用して新しいデータをステージングテーブルにコピーし、フィルター処理を実行し、最後にMERGEおよび/またはINSERT INTOを使用してデータを最終テーブルにコピーします。 ->編集1:Martin Smithによってリンクされた手順に従い、次の結果が得られました。 [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 …

3
「WHERE 1 = 1」は通常、クエリのパフォーマンスに影響しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 最近、「where 1 = 1 statement」という質問を見ました。(ホスト言語の観点から)よりクリーンなコードを作成するために、動的SQLの作成によく使用するSQL構成体。 一般的に、SQLステートメントへのこの追加は、クエリのパフォーマンスに悪影響を及ぼしますか?特定のデータベースシステムに関する回答を探しているわけではありません(DB2、SQL Server、MS-Access、およびmysqlで使用しているためです)。

9
Standard EditionのOracle Databaseパフォーマンスを監視するツール[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 2年前に閉店。 私が探しているものは次のとおりです。 Standard Edition、つまり診断パックなしで動作します。 現在および過去のパフォーマンスデータを提供します。 トレンドを簡単に見つけて経営陣に提示するための優れたビジュアル。 このツールを使用したことがある場合、あなたが発見した長所と短所に興味があります。リストを思い付くことができますが、実際にツールを使用したという洞察ははるかに価値があります。

4
Oracleを搭載したSSD
テスト移行の実行を高速化するために、OracleでSSDを使用することを検討してきました。現在、移行の実行を完了するのに12〜18時間かかり、データ量に依存しています(明らかに多くのパフォーマンス調整も行っています)。さまざまな実行や分析に使用している安価なLinuxボックスが多数あります。 デルから直接のSSDのコストは法外です。消費者向けSSD(Crucial / Micronなど)の使用経験がある人はいないかと思いました。 Linuxでは、CIMを使用してTRIMサポートが問題になることを認識しています。誰かがこれに対抗するためにWindows 7でそれらを使用しましたか?

4
ORMを使用する場合、データベース設計で注意すべき点は何ですか
オブジェクトリレーショナルマッパー(ORM)ウィキペディアを使用してデータベースにアクセスすることがわかっている場合に注意すべきデータベース設計の落とし穴は何ですか?Entity Framework NHibernateまたはLLBLGenProも参照してください。 例として、SqlServerのRPC呼び出しの2100パラメーターの制限に注意してください。これは、LLBLgenを使用し、複合主キーが使用されているときにテーブルを結合する場合の問題です。複合キーのMSDN記事を参照してください。
19 performance  orm 

2
plpgsqlで記述された関数呼び出しのPostgresクエリプラン
使用するとき、それは可能ですpgadminかplsql内部で実行されるSQL文のクエリプランのホールドを取得するために、U SER D efined F慰め(UDF)を使用しますEXPLAIN。それでは、UDFの特定の呼び出しに対するクエリプランを取得するにはどうすればよいですか?F()pgadminでUDFが抽象化されて単一の操作になっています。 ドキュメントを見てきましたが、何も見つかりませんでした。 現在、ステートメントを引き出して手動で実行しています。しかし、これは大規模なクエリに対しては削減されません。 たとえば、以下のUDFを検討してください。このUDFは、クエリ文字列を出力できますが、ローカルに作成された一時テーブルがあり、貼り付けて実行すると存在しないため、コピーと貼り付けでは機能しません。 CREATE OR REPLACE FUNCTION get_paginated_search_results( forum_id_ INTEGER, query_ CHARACTER VARYING, from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, in_categories_ INTEGER[] DEFAULT '{}') RETURNS SETOF post_result_entry AS $$ DECLARE join_string CHARACTER VARYING := ' '; from_where_date CHARACTER …

2
サブクエリを介して複数の列を選択する
次のクエリのサブクエリから2列を選択しようとしていますが、選択できません。エイリアステーブルを作成しようとしましたが、まだ取得できませんでした。 SELECT DISTINCT petid, userid, (SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate, (SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID FROM pet LEFT JOIN comments ON pet.id = comments.petid WHERE userid='ABC' AND deviceID!='ABC' AND comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH); 基本的に、私は同じ行からlastComDate&を取得しようとしていますlastPosterID-特定のペットのコメントの最新の行です。効率的な方法でそれらを取得する方法を提案してください。 上記のクエリは機能しますが、同じ行が2回フェッチされるため、過剰に思えます。さらに、ORDER BYクエリのプロファイリング中に見つけたように、句は集計関数よりもかなり遅くなります。そのため、ソートを回避するソリューションが必要です。

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