• ベストアンサー

PostgreSQLのanalyzeとは

PostgreSQLのanalyzeについてですが。 [TABLE]の統計情報を再取得する為に  analyze TABLE; と実行した場合。 該当のテーブルへの影響というのは全く無いものなのでしょうか。 (同じタイミングでアクセスしたselectが遅延してしまう等)

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

PostgreSQLに限らず、統計情報を取得する場合テーブルやインデックスのアクセスが発生しますから、全く影響がないということはありません。 Oracleなどでは大きなテーブルのanalyzeの点にサンプリングする比率を指定できたりできますけれど。 できるだけDBへの負荷が少ない時間帯を選んで実行するしかないと思います。

minarai563
質問者

お礼

ご回答ありがとうございます。 やはり大なり小なり、何かしらの影響はありますよね。。。 「全く影響無いから頻繁に利用があってる時でも大丈夫!」と同僚が言ってきたので、 「あれ?・・・けど再取得になめるよなぁ・・」と思っていました(汗) どうもありがとうございました。

関連するQ&A

  • 【ANALYZE】 テーブル・インデックス数が多い

    過去の質問を検索しても該当するものが無かったのでご質問させていただきます。 現在、オプティマイザ(コストベース)について調べています。 ANALYZEコマンドを使用して、テーブルおよびインデックスの 統計情報を取りたいのですが、以下のコマンドのようにテーブル名もしくはインデックス名を指定することしかできないのでしょうか? ANALYZE TABLE テーブル名 COMPUTE STATISTICS; ANALYZE INDEX インデックス名 COMPUTE STATISTICS; テーブル数及びインデックス数が非常に多いため、上記の方法では手間がかかります。 もう少し効率の良い方法を探しているのですが、ご存知であれば教えてください。 よろしくお願いいたします。

  • oracle:統計情報とテーブル削除

    oracle10gを使用しております。 統計情報について質問させていただきます。 テーブルAについて、[statistics = none]を指定しExportします。 統計情報取得コマンドを実行します。 analyze table TABLE_A compute statistics; 後に、テーブルAを削除します。 drop table TABLE_A; バックアップファイルを基に、テーブルAをImportします。 このとき、テーブルAの統計情報はExport実行時と同じになるのでしょうか?

  • PostgreSQLの「*」について・・?

    こんにちわ, 今PostgreSQLを勉強しています。 たとえば, SELECT * FROM table where field ~ 'a'; とすると,tableテーブルからfieldに「a」が入っている項目を抜き出す,となります。 これに SELECT * FROM table where field LIKE '*a'; とすると,エラーが出てしまいます。 *(ワイルドカード)の使用はどのようなときに使用するのでしょうか。PostgreではLinuxとは違う使用をすると書いてあったのですが,よくわかりません。 よろしくおねがいします。

  • 大量にデータを更新するテーブルの統計情報について

    大量にデータを更新するテーブルの統計情報の取得タイミングについてついて質問があります。 該当のテーブルはワークテーブルでテーブルの1/3程の大量データを毎回delete,insert,selectの順番で処理をおこなっています。 大量のデータを毎回更新しているのでselect文の際に統計情報が古いため実行計画が正しくなく処理が遅くなる可能性があるのでは無いかと心配しております。 統計情報は、取るべきでしょうか?取る場合は何時のタイミングで取るべきでしょうか? Oracle 9iを使用しています。 宜しくお願い致します。

  • PostgreSQLのカラムに"user"という名前のカラムがある場合のデータ表示について

    PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。 ユーザー名を管理するテーブルを以下のように作成しました。 テーブル:table  |No|user|from |  |1 |Atom|tokyo|  |2 |Boss|izu |  |3 |Cat |chiba| このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。  SELECT user FROM table 上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。 試しに  SELECT * FROM table で実行するとテーブルのデータを取得でき、  SELECT table.user FROM table で実行するとsyntax errorとエラー表示されデータが結果が表示されません。 userをセッション情報としてではなく、テーブル(table)のデータとして取得したい場合はどのようにしたらいいのでしょうか? よろしくお願いします。

  • PostgreSQL初心者です。助けてください。

    PostgreSQLを使用し、PHPプログラムから・・・ プログラム記述をミスしてしまい。 トランザクションを終了できないままテーブルがロックされてしまいました。 bigin を実行し lock table しましたが 何と commit 文が注釈に なっており、テーブルがロックされたままの状態になってしまいました。 drop table もできなくなっています。 とにかくこのロック状態を解消したいのですが・・・ よろしくご教授ください。

  • PostgreSQLでサブクエリーをJOINする方法

    たとえば、 select A.field1, B.field1 from (select field1 from table1 where field2='x') A, (select field1 from table2 where filed2='y') B where A.field2=B.field2; のようなことをしたいのですが、 Oracleだとこの方法でデータを取ってこれるのですが、PostgreSQLだとエラーで返ってきてしまいます。 PostgreSQLのバージョンは6.5.3です。 バージョンが上がると上記の書き方も通るようになるのでしょうか? また、上記の書き方と同じ意味を持つ他の書き方をご存知でしたら教えてください。よろしくお願いします。

  • PHPとPostgreSQLにおいて

    こんばんわー。質問させて下さい。 PostgreSqlでテーブルを作成しました。 ---------------------------- [test_db] id:integer name:varchar(128), number integer ---------------------------- 上記のテーブルの構成をPHPプログラム内で取得 したいのですが、ご存知の型いらっしゃいますか? ちなみにPHP4です。 とりあえず浮かんだ考えは、 一度レコードをSELECTしてそれぞれのフィールドの型と大きさを取得する方法なんですが、レコードが存在していないとできないと思います。 すみませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PostgreSQLの言語設定について

    サーバーOS:ターボ10 クライアントOS:winXP DB:PostgreSQL 7.4.5 エミュレータ:Tera Term Pro version 2.3 この場合、PostgreSQLのエンコードは何がいいですか? やりかたはどうすれば良いですか? Tera Termのエンコードは一応SJISにしようかと漠然と思いましたがEUCの方がいいですか? サーバー自体のエンコードは何か設定必要ですか? (1)winXPからTera Termでターボ10に搭載したポスグレのテーブル項目に日本語をインサートし、そのテーブルをODBC経由でwinXPのアクセスでブラウズする。 サーバー操作 create table tbl1 (item1 char(10)); insert into tbl1 values('あいうえお'); PC操作 アクセスでブラウズ (アクセスの接続は解決済み) (2)winXPのアクセスでODBC経由のポスグレのテーブルを編集した後、Tera Termでターボ10に搭載したポスグレのテーブル項目に日本語の検索をかける。 PC操作 アクセスで'かきくけこ'を挿入。 サーバー操作 select * from tbl1 where item1 like'か%';

  • postgreSQLで分からないことがあります。

    postgreSQLで分からないことがあります。 よろしくお願いします。 下にあるtblというテーブルがあったとき。 下のSQLを実行するとデータがうまく取れているんですが、 CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列 なのに何故正しく比較できているのでしょうか? 日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか? tblテーブル *sdateとedateはtimestamp型です。 sdate      | edate | ----------------------------------------- 2010-5-1 10:00:00 | 2010-5-2 13:00:00| SELECT * FROM tbl WHERE CURRENT_DATE BETWEEN SUBSTR(sdate, 1, 10) AND SUBSTR(edate, 1, 10)