2016-11-08 21 views
1

非常に単純なクエリでクエリを実行するSybaseデータベースがあります。Sybase/hibernateデータベースのパフォーマンス

Select * from ts_logs where time_sheet_id = 1234 

テーブルのレコード数は約110万であり、3日前までは約0.5秒で実行される非常に高速なクエリでした。

私たちのアプリケーションは、hibernateを使用し、sql出力はまったく同じクエリを表示します。 3日前の時点で、クエリの実行に9〜11秒かかってしまい、パフォーマンスが大幅に低下していることに気付きました。

NetBeansデータベースビジュアライザで、同じパフォーマンスの問題が発生したクエリを実行しようとしました。最初にこれをデータベースのパフォーマンス問題と判断し始め、dbvisualizerでさらに問題を診断することにしましたが、驚いたことにdbvisualizerは0.5秒未満で同じ正確なクエリを実行していました。

すべての環境でjtds 1.3を使用しています。

すべての環境で同じデータベース。

すべての環境で同じクエリです。

hibernate/netbeansではパフォーマンスボトルネックが発生する可能性がありますが、dbvisualizerではできません。見える次の場所の任意の考えですか?

CREATE TABLE ts_log (id numeric identity(19) NOT NULL GENERATED ALWAYS AS IDENTITY, log_comment varchar(2500), log_entry varchar(2500) NOT NULL, time_sheet_id numeric(19) NOT NULL, PRIMARY KEY (id)); 
+1

クエリが返す行の数はいくつですか?たぶん、DbVisualizerはそれらのすべてを表示せず、NetBeansは表示します。または、DbVisualizerはすべてのコンテンツを表示しません。あなたの質問を編集して、問題のテーブルの 'create table'文を追加してください。あなたは4つの環境すべてで接続URLに**同一の**パラメータを使用していますか? –

+0

create文で質問を更新しました。 NetBeansのデフォルトは1000行です。返される実際の行の合計は2です。すべての環境で同じURL。 –

答えて

1

おそらく、クエリプランが変更された可能性があります。おそらく、行数が増えたためです。 UPDATE STATISTICSを実行し、クエリプランを確認する必要があります。検索引数が目的の行を取り出すのに十分に選択的でない場合は、テーブル/クエリの設計を再考する必要があります。

+0

昨夜更新統計を実行し、問題が修正されたことが判明しました。 dbvisualizerがテーブル索引を使用してテーブルを照会するマシンがありましたが、dbvisualizerが使用されていた他のマシンでは、同じドライバがあってもテーブルインデックスは使用されませんでした。私は、インデックスがいつも使われるとは限りませんが、何を尋ねる質問を投稿しようとしていましたか?これは、異なるマシン間で非常に一貫した動作であるように見えました。あなたはこれに関して何か考えを持っていますか?ほぼ3年間稼働しており、突然問題が発生しました。 –

+0

データの内容が変更されたり、テーブルが断片化したりすると、いつでもクエリプランが反転する可能性があります。したがって、UPDATE STATISTICS(可能な場合はUPDATE INDEX STATISTICS)を定期的に実行することは、通常のデータベース保守の一部です。 – RobV

関連する問題