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

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

3
VARCHAR列のサイズを小さくすることに意味はありますか?
VARCHAR2Oracleの列のサイズがパフォーマンスに影響するかどうかに関係なく、あちこちでグーグルでレポートが混在しているようです。 VARCHARサイズの問題に少しひねりを加えたいと思います。 (複数行)フリーテキストフィールド(与えられていないあなたは(オラクル)データベースに格納することを名前のような短いもの)、内の任意の点(WRT。パフォーマンスやそれ以外)が存在しない限界いっぱいまでVARCHAR(容量VARCHAR2(4000)Oracleの上に)が、選択は、とにかく98%のケースで十分であるため、1024や512などの小さい値。

2
SQL Server Join / where処理順序
Slow SQLクエリを読んだ後、最適化の方法がわからないので、クエリの一般的なパフォーマンスについて考えるようになりました。クエリをわずかに高速化するために、結合する前に(他のテーブルを結合する場合)最初のテーブルの結果をできるだけ小さくする必要があります(この質問の内部結合)。 例、これが必要です: SELECT * FROM ( SELECT * FROM table1 WHERE col = @val ) t INNER JOIN table2 ON col = col2 以下より良く/速くなる SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val 私の理論は次のとおりです(これは正しい実装ではないかもしれません。私が読んだSQL Server 2008の内部の本(MSFT Press)から思い出そうとしています)。 クエリプロセッサは最初に左側のテーブル(table1)を取得します 2番目のテーブル(table2)を結合し、必要な行をフィルタリングする前にデカルト積を形成します(該当する場合) 次に、SEELCTステートメントを使用してWHERE、ORDER BY、GROUP BY、HAVING句を最後に実行します。 したがって、上記のステートメント#1でテーブルが小さい場合、SQLエンジンはデカルト積を形成するときに行う作業が少なくなります。その後、whereステートメントに到達すると、メモリ内でフィルタリングする結果セットが減少します。 …

2
変更されていない列も含めて、すべての列を更新するオーバーヘッドはどれくらいですか[クローズ]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店しました。 行の更新に関して、多くのORMツールは、特定のエンティティに関連付けられているすべての列を設定するUPDATEステートメントを発行します。 利点は、UPDATEどのエンティティ属性を変更しても同じステートメントであるため、更新ステートメントを簡単にバッチ処理できることです。さらに、サーバー側とクライアント側のステートメントキャッシングも使用できます。 したがって、エンティティをロードし、単一のプロパティのみを設定した場合: Post post = entityManager.find(Post.class, 1L); post.setScore(12); すべての列が変更されます: UPDATE post SET score = 12, title = 'High-Performance Java Persistence' WHERE id = 1 ここで、titleプロパティにもインデックスがあると仮定すると、DBは値がとにかく変わっていないことに気付かないでしょうか? で、この記事で、マルクスWinandは言います: すべての列の更新は、前のセクションで既に確認した同じパターンを示しています。応答時間は、インデックスが追加されるたびに増加します。 データベースは関連するデータページをディスクからメモリにロードし、列の値を変更する必要があるかどうかを判断できるため、なぜこのオーバーヘッドがあるのだろうかと思います。 インデックスの場合でも、変更されていない列のインデックス値は変わらないが、UPDATEに含まれているため、何も再分散しません。 データベースがリーフ値が同じであることを認識するためだけに、冗長で変更されていない列に関連付けられたB +ツリーインデックスもナビゲートする必要があるのでしょうか? もちろん、いくつかのORMツールでは、変更されたプロパティのみを更新できます。 UPDATE post SET score = 12, WHERE id = 1 しかし、このタイプのUPDATEは、さまざまな行のさまざまなプロパティが変更されたときに、バッチ更新またはステートメントキャッシュの恩恵を常に受け​​られるとは限りません。

1
NULL以外の値またはNULLの列をチェックするSQLクエリを記述する最適な方法
デフォルト値としてNULLを持つパラメーターを持つSPがあり、次のようなクエリを実行したい: SELECT ... FROM ... WHERE a.Blah = @Blah AND (a.VersionId = @VersionId OR (@VersionId IS NULL AND a.VersionId IS NULL)); WHERE非NULL値とのNULL値の両方のための上記のチェック@VersionId。 代わりにIFステートメントを使用し、クエリをNULL以外を検索するクエリとNULLを検索するクエリに複製する方がパフォーマンスの点で優れているでしょうか?: IF @VersionId IS NULL BEGIN SELECT ... FROM ... WHERE a.Blah = @Blah AND a.VersionId IS NULL; ELSE BEGIN SELECT ... FROM ... WHERE a.Blah = @Blah …

3
POINT(X、Y)とGeomFromText(“ POINT(XY)”)の違いは何ですか?
MySQLデータベースにいくつかの幾何学的位置を保存したいと思います。このために、POINTデータ型を使用します。ほぼすべての場所GeomFromTextで、テーブルにデータを挿入するために関数を使用する必要があることを読みました。 しかし、私POINT(X,Y)もそれが機能することがわかりました。のGeomFromText代わりにを使用する理由についての説明が見つかりませんでしたPOINT。 たとえば、次の単純な関係があります。 CREATE TABLE Site ( SiteID BIGINT UNSIGNED, Position POINT ); そして、次の2つのバリアントを使用して値を挿入できます。 INSERT INTO Site ( 1, GeomFromText( 'POINT(48.19976 16.45572)' ) ); INSERT INTO Site ( 2, POINT(48.19976, 16.45572) ); テーブル(SELECT * FROM Site)を表示すると、場所に同じバイナリBLOBが表示され、座標(SELECT *, AsText(Position) FROM Site)を表示すると、同じ値が表示されます。 では、なぜGeomFromTextを使用する必要があるのでしょうか?これら2つのバリアントの間に(既知の)パフォーマンスの違いはありますか?これはMySQL以外のデータベースシステムでどのように解決されますか?

3
JOIN条件とWHERE条件の実行に違いはありますか?
これら2つのクエリ例の間にパフォーマンスの違いはありますか? クエリ1: select count(*) from table1 a join table2 b on b.key_col=a.key_col where b.tag = 'Y' クエリ2。 select count(*) from table1 a join table2 b on b.key_col=a.key_col and b.tag = 'Y' 唯一の違いは補足条件の配置であることに注意してください。最初はWHERE句を使用し、2番目は条件をON句に追加します。 Teradataシステムでこれらのクエリを実行すると、Explainプランは同一であり、JOINステップはそれぞれの場合に追加の条件を示します。しかし、MySQLに関するこのSOの質問では、回答の1つはWHERE、結合が行われた後に処理が行われるため、2番目のスタイルが好ましいことを示唆しています。 このようなクエリをコーディングする際に従うべき一般的なルールはありますか?データベースに明らかに影響を与えないため、プラットフォームに依存する必要があると思いますが、おそらくそれはTeradataの単なる機能です。また、プラットフォームに依存する場合は、いくつかのドキュメントリファレンスを入手してください。何を探すべきか本当に分かりません。

3
MyISAMとInnoDBのベスト
InnoDBで、同時実行パフォーマンスの利点を得ながら、RAMの制限のためにクラスター化インデックスの代わりにMyISAMと同じインデックスを使用することは可能ですか?

2
Google BigTables(およびその他の統合DB)でのパフォーマンステストの取得と配置
特にデータベース自体が専用ツールを提供していない環境で、データベース操作のプログラムによるパフォーマンステストを実行するための効果的な方法は何ですか? たとえば、Google App Engineでは、ページ読み込み全体が特定のデータベース操作を含む1つの操作として評価されます。この問題は、SQLiteやその他の統合DBにも存在する可能性があります。テストが必要な選択および挿入(と同等)を完全に抽象化することは困難なので、これらの種類のクエリでより徹底的な診断を実行するための推奨データベースツールはありますか?

3
トリガーが有効な場合のレコードの削除が遅い
これは以下のリンクで解決されたと思います-回避策は動作します-しかし、パッチは動作しません。Microsoftサポートと協力して解決します。 http://support.microsoft.com/kb/2606883 わかりましたので、誰かがアイデアを持っているかどうかを確認するためにStackOverflowに捨てたい問題があります。 これはSQL Server 2008 R2でのことに注意してください 問題:15000レコードのテーブルから3000レコードを削除すると、トリガーが有効な場合は3〜4分かかり、トリガーが無効な場合は3〜5秒しかかかりません。 テーブルのセットアップ メインとセカンダリと呼ばれる2つのテーブル。セカンダリには削除するアイテムのレコードが含まれているため、削除を実行するとセカンダリテーブルに参加します。deleteステートメントの前にプロセスが実行され、削除するレコードがセカンダリテーブルに入力されます。 ステートメントを削除: DELETE FROM MAIN WHERE ID IN ( SELECT Secondary.ValueInt1 FROM Secondary WHERE SECONDARY.GUID = '9FFD2C8DD3864EA7B78DA22B2ED572D7' ); このテーブルには多くの列と約14の異なるNCインデックスがあります。トリガーが問題であると判断する前に、さまざまなことを試しました。 ページロックをオンにします(デフォルトではオフになっています) 手動で収集された統計 統計の自動収集を無効にしました 検証済みのインデックスの健全性と断片化 テーブルからクラスター化インデックスを削除しました 実行計画を調査しました(インデックスの欠落として表示されるものはなく、実際の削除にかかるコストは70%で、レコードの結合/マージには約28%でした) トリガー テーブルには3つのトリガーがあります(挿入、更新、削除の各操作に1つ)。削除トリガーのコードを変更して、単に戻るようにした後、1つを選択して、トリガーされる回数を確認しました。操作全体で1回だけ起動します(予想どおり)。 ALTER TRIGGER [dbo].[TR_MAIN_RD] ON [dbo].[MAIN] AFTER DELETE AS SELECT 1 RETURN 要点をまとめると トリガーがオンの場合-ステートメントの完了には3〜4分かかります トリガーがオフの場合-ステートメントの完了には3〜5秒かかります …

2
SQL Serverユーザーを「ボリュームメンテナンスタスクの実行」に追加すると、データベースのサイズ変更の速度が大幅に向上するのはなぜですか?
5GBデータベースを作成したい場合 CREATE DATABASE [test] CONTAINMENT = NONE ON PRIMARY ( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) SSD では1分かかります。 しかし、SQL Serverユーザーを Perform volume maintenance tasks …

2
結合述語で変数を参照すると、ネストされたループが強制されるのはなぜですか?
最近この問題に遭遇しましたが、オンラインで議論することができませんでした。 以下のクエリ DECLARE @S VARCHAR(1) = ''; WITH T AS (SELECT name + @S AS name2, * FROM master..spt_values) SELECT * FROM T T1 INNER JOIN T T2 ON T1.name2 = T2.name2; ネストされたループ計画を常に取得します 問題INNER HASH JOINまたはINNER MERGE JOINヒントで問題を強制しようとすると、次のエラーが生成されます。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、SET FORCEPLANを使用せずに、クエリを再送信します。 ハッシュ結合またはマージ結合の使用を許可する回避策を見つけました-変数を集約にラップします。生成された計画は大幅に低コストです(19.2025対0.261987) DECLARE @S2 VARCHAR(1) = ''; WITH T AS (SELECT …

1
ASYNC_NETWORK_IO待機タイプは心配することはありますか?
実行に長い時間がかかるストアドプロシージャのリストを見ると、待機時間が最も多いことが際立っています。ただし、その待機時間のほとんど(81%)はASYNC_NETWORK_IOであり、その理由はわかっています。ストアドプロシージャは約400 MBの情報を転送します。 ドキュメントでは、ASYNC_NETWORK_IOの原因は、クライアントがデータのフラッドに追いつくことができないことであり、それはおそらく真実であると述べています。クライアントがADO.NET経由でストアドプロシージャを呼び出してからデータセットを処理するだけなので、クライアントを維持する方法がわかりません。 したがって、この情報が与えられた場合、この手順のASYNC_NETWORK_IO待機タイプについて心配する必要がありますか?実際にサーバーのパフォーマンスに影響しますか? 追加情報: SQL Server 2005のサービスパック2を使用しています。 クライアントアプリは、SQL Serverと同じボックス上にあります(私は知っています...知っていますが、それについては何もできません)。

2
一時テーブルでvarcharサイズは重要ですか?
ストアドプロシージャの一時テーブルのvarchar(255)すべてのvarcharフィールドに使用することについて、妻の仕事について議論があります。基本的に、一方のキャンプは定義が変更されても常に機能するため255を使用し、もう一方のキャンプは潜在的なパフォーマンス向上のためにソーステーブルのサイズを維持したいと考えています。 パフォーマンスキャンプは正しいですか?他に影響はありますか?彼らはSQL Serverを使用しています。

2
PostgreSQLインデックスキャッシング
PostgreSQLでのインデックスのキャッシュ方法に関する「わかりやすい」説明を見つけるのが難しいので、これらの仮定のいずれかまたはすべてを現実的にチェックしたいと思います。 行のようなPostgreSQLインデックスはディスク上に存在しますが、キャッシュされる場合があります。 インデックスは完全にキャッシュ内にある場合とまったくない場合があります。 キャッシュされるかどうかは、それが使用される頻度に依存します(クエリプランナーが定義)。 このため、ほとんどの「賢明な」インデックスは常にキャッシュに置かれます。 インデックスbuffer cacheは行と同じキャッシュ(?)に存在するため、インデックスで使用されるキャッシュスペースは行で使用できません。 これを理解する動機は、データの大部分が決してアクセスされないテーブルで部分インデックスを使用できると示唆された別の質問に続いています。 これを実行する前に、部分インデックスを使用すると2つの利点が得られることを明確にしたいと思います。 キャッシュ内のインデックスのサイズを小さくし、キャッシュ内の行自体により多くのスペースを解放します。 Bツリーのサイズを小さくして、クエリの応答を高速化します。

2
単純な結合で使用されない主キーのインデックス
次の表とインデックスの定義があります。 CREATE TABLE munkalap ( munkalap_id serial PRIMARY KEY, ... ); CREATE TABLE munkalap_lepes ( munkalap_lepes_id serial PRIMARY KEY, munkalap_id integer REFERENCES munkalap (munkalap_id), ... ); CREATE INDEX idx_munkalap_lepes_munkalap_id ON munkalap_lepes (munkalap_id); munkalap_idのインデックスが次のクエリで使用されないのはなぜですか? EXPLAIN ANALYZE SELECT ml.* FROM munkalap m JOIN munkalap_lepes ml USING (munkalap_id); QUERY PLAN Hash Join (cost=119.17..2050.88 …

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