質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

4回答

8826閲覧

既存テーブルに対してのインデックス作成時間の見積もり方法について

YasuhiroMiyake

総合スコア1336

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2017/12/19 02:22

編集2017/12/20 11:00

以下の条件で、インデックスの追加を行いたいと考えています。
データの特性などによって作成時間に幅があることは理解しているつもりです。
計画メンテナンスなどを行う時に、どの程度の時間があれば終わるのかを試算したいと考えています。

###前提・実現したいこと
既存のテーブルは1億レコード以上存在している。
インデックス作成時間のおおよその時間を見積もりたい。

###該当のソースコード

SQL

1CREATE INDEX CONCURRENTLY t_hoge_01 2 ON t_hoge 3 USING btree 4 (hoge1, hoge2); 5 6hoge1は、IDのような値が入ります。(bigint : 連番) 7hoge2は、種別のような値があります。(integer : 8, 16, 32)

###試したこと
実際にインデックスが作成されるまでの時間は11時間程度でした。
他のサーバ(スペックは2xLarge)で100万レコード程度で試すと課題が発生しなかったので、あまり参考になりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
PostgreSQL 9.4.7
AWS EC2 m2.4xlarge

解答まとめ

計測方法について
・テストデータあるいは実際のデータを別のサーバに用意して、実測値を取得する。

PostgreSQL の環境について
・ディスクとメモリの状況に影響されやすい

今後について
・パーティショニングなどを用いて、テーブルを分割することを検討する

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

そもそもインデックスってあとから追加するものじゃないですし
何度も行うわけじゃないですから、定期メンテかなにかのときに
ユーザーからのアクセスをとめて「えいや」でやるしかないでしょう
時間は数日かかる可能性は否定できないし
テスト環境にデータを全部コピーをとって実験し現実的でなければ諦めるか
インデックスがマストな状況であれば、早く終わることを祈ってやるだけのこと。
実際のところ億もデータがあるならパーティショニングなどもっと
抜本的な対応をしないと検索性は上がらないと思います

投稿2017/12/19 08:32

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

通常、テスト環境を用意してデータを持って行き、 CREATE INDEX を実行して、テスト環境は本番環境の何分の一の環境だから、本番環境ではこのくらいの時間がかかるだろう、って想定します。

投稿2017/12/19 21:40

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

バックアップから環境をリストア、そこで擬似的に作業して時間を見積もると良いのではないでしょうか?

投稿2017/12/19 10:05

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

postgresのパラメータ設定、Disk資源の状況、メモリ資源の状況、CPUの稼働率など色んな要素がありすぎですから、実測による平均値などにリスクを加味した値で見積もっておくしかないのではないのでしょうか。

一番影響しやすい要素としては、Diskとメモリの割り当てだと思います。
DIsk資源については、SSDじゃないなら、Windousであれば断片化も影響しますし、断片化してない状況でも安定させる為にはクラスタ化しておくとか。
メモリについては、postgresの場合はシステムが管理しているメモリの方をよく使用するので、割り当てすぎるのもよくないですし、posgres以外のアプリが稼働しているような状況でも変わりますしね。

投稿2017/12/19 03:26

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問