
- EDB
- PostgreSQL
意外な落とし穴!アプリケーション⇒DBデータ型によるパフォーマンス影響
PostgreSQLのオプティマイザがインデックスを適切に使用できない理由は様々ですが、本記事ではJDBC⇔PostgreSQL間でデータ型の不一致がインデックスの使用にどういった悪影響を及ぼすかを見ていきます
|
EDB Postgres Advanced Server(EPAS)のコマンドライン・インターフェースには、psql(edb-psql)の他にEDB*Plusがあります。EDB*Plusは、Oracle DatabaseのSQL*Plusと互換性があるため、Oracle Databaseに慣れている方はそちらのほうが使いやすいでしょう。今回は、EDB*Plusの簡単な使用方法と、SQL*Plusとの違いをご紹介します。
EDB*Plusは、EPAS上でコマンドライン・インターフェースを提供するユーティリティです。EDB*Plusでは、SQLコマンド、Oracle PL/SQLと互換性のあるSQL Procedural Language(SPL)無名ブロック、EDB*Plusコマンドを使うことができます。
EDB*PlusコマンドはOracleのSQL*Plusコマンドと互換性があり、以下のような様々な機能を提供します。
- データベースオブジェクトにクエリを発行
- ストアドプロシージャを実行
- SQLコマンドの出力を整形
- バッチスクリプトを実行
- OSコマンドを実行
- 出力を記録
EPAS9.6以前のバージョンをご利用の場合、デフォルトの設定でEPASをインストールすることによりEDB*Plusはインストールされます。EPASのインストール手順については、弊社作成の「 はじめてのEDB Postgres (製品概要・構築編) 」または マニュアル をご参考になさってください。
EPAS10以降のバージョンをご利用の場合、EDB*PlusはEPASインストール時にインストールされないため、EPASをインストール後にyum(Linuxのみ)またはStackBuilder Plusからインストールします。yumやStackBuilder PlusからEDB*Plusをインストールする詳細な手順については、 マニュアル をご参考になさってください。
EDB*Plus は、GUIのアプリケーションメニューから選択するか、OSコマンドから直接EDB*Plus(Windowsの場合:edbplus.bat、Linuxの場合:edbplus.sh)を起動することで使用できます。
OSコマンドから直接EDB*Plusを実行する場合、Windows環境では実行ファイルの拡張子を付けずにEDB*Plusを使用できますが、Linux環境ではデフォルトで拡張子を付けて実行する必要があります。Linux環境でも実行ファイルの拡張子を付けずにEDB*Plusを使用するには、aliasコマンドで拡張子無しのedbplusコマンドを作成します。
以下では、Linux環境でEDB*PlusからEPASに接続してemp.sqlというEMP表を参照するバッチスクリプトを実行するまでの手順をご紹介します。
OS:Oracle Enterprise Linux 6.4 64bit
DB:EDB Postgres Advanced Server 10.3.8
EDB*Plus:v10.36.0.0
--aliasコマンドでedbplusコマンドを作成 ※この手順は任意です。
# su - enterprisedb $ source /opt/edb/as10/pgplus_env.sh #EPAS関連の各種環境変数の設定。
$ alias edbplus='/opt/edb/as10/edbplus/edbplus.sh' $ edbplus /nolog EDB*Plus: Release 10 (Build 36.0.0) Copyright (c) 2008-2017, EnterpriseDB Corporation. All rights reserved. SQL> SQL> exit
--edbデータベースへの接続情報を格納する$EDBHOME/edbplus/login.sqlを確認
$ cat $EDBHOME/edbplus/login.sql define edb="localhost:51001/edb" #login.sqlでは、Oracleのtnsnames.oraで設定する接続識別子と同様にデータベースへの接続情報を設定。 #define <接続識別子名>=host[:port][/dbname]の構文で接続情報を設定。 #portがデフォルトの5444の場合、portとdbname(デフォルトはedb)の指定は必須ではない。
--emp.sqlの内容を確認 ※事前に$EDBHOME/edbplusディレクトリ配下に以下の内容で作成しています。
$ cd $EDBHOME/edbplus $ cat emp.sql set linesize 100 set pagesize 100 describe emp select * from emp;
--edbデータベースに接続
$ cd $EDBHOME/edbplus #@<接続識別子>を使用して接続する場合、$EDBHOME/edbplusディレクトリでedbplus username/passwordコマンドを実行する必要がある。
$ edbplus enterprisedb/oracle@edb Connected to EnterpriseDB 10.3.8 (localhost:51001/edb) AS enterprisedb EDB*Plus: Release 10 (Build 36.0.0) Copyright (c) 2008-2017, EnterpriseDB Corporation. All rights reserved. SQL>
--EDB*Plusからemp.sqlを実行
SQL> @emp Name Null? Data Type ------------------------------------------------------ -------- ----------------------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE TIMESTAMP(6) SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------------------------- --------- --------- ------ 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 20 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00 20 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 30 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00 30 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00 10 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000.00 20 7839 KING PRESIDENT 1981-11-17 00:00:00 5000.00 10 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.00 20 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00 30 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00 20 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00 10 14 rows retrieved.
以上のように、EDB*PlusではSQL*Plusと同様に@<スクリプトファイル名>でのバッチスクリプト実行、DESCRIBEコマンド実行ができます。
EDB*Plus上でHOSTコマンドでOSコマンドを実行することはできますが、"!"でOSコマンドを実行することはできません。
SQL> host pwd /home/enterprisedb SQL> host id uid=525(enterprisedb) gid=525(enterprisedb) 所属グループ=525(enterprisedb) context=unconfined_u:unconfined_r:unconfined_java_t:s0-s0:c0.c1023 SQL> ! id 2 3
SQL*Plusコマンドと互換性のあるEDB*Plusコマンドもありますが、全てのSQL*Plusコマンドに対応しているわけではありません。以下が、EDB*Plusコマンドの内容です。
SQL> help index Type 'HELP [topic]' for command line help. @ ACCEPT APPEND CHANGE CLEAR COLUMN CONNECT DEFINE DEL DESCRIBE DISCONNECT EDBPLUS EDIT EXIT GET HELP HOST INDEX INPUT LIST PASSWORD PAUSE PRINT PROMPT QUIT REMARK SAVE SET SHOW SPOOL START TRIMS UNDEFINE VARIABLE
EDB*PlusはSQL*Plusとの互換性を意識して開発されているため、psql(edb-psql)との互換性がなくなっている部分があります。以下に、psql(edb-psql)との互換性がない部分をご紹介します。
psql(edb-psql)ではデフォルトの設定で自動コミットは有効ですが、EDB*Plusではデフォルトの設定で無効です。EDB*Plusで自動コミットを有効にしたい場合には以下のコマンドを実行する必要があります。
SQL> SET AUTOCOMMIT ON SQL>
psql(edb-psql)ではSETコマンドによりセッション単位でEPASのパラメーターを設定/変更できましたが、EDB*PlusのSETコマンドはSQL*Plusと同様にシステム変数などの設定を行うコマンドであるため、EPASのパラメーターを設定/変更することはできません。EDB*Plusを使用してセッション単位でEPASのパラメーターを設定/変更する場合にはALTER SESSION文を実行する必要があります。
以下の例では、EDB*Plusを使用してclient_encodingパラメーターの設定をSJISに設定しています。
SQL> ALTER SESSION SET client_encoding=SJIS; Session altered.
psql(edb-psql)ではSHOW ALLコマンドでEPASのパラメーター設定を確認できましたが、EDB*PlusのSHOW ALLコマンドは変数の設定を確認するコマンドであるため、EPASのパラメーター設定を確認することができません。EDB*PlusでSHOWコマンドを使用してパラメーター設定を確認する場合にはSHOW PARAMETERコマンドを実行する必要があります。
SQL> SHOW PARAMETER NAME VALUE --------------------------------------- --------------------------------------- DateStyle ISO, DMY IntervalStyle postgres TimeZone Asia/Tokyo allow_system_table_mods off ...(以降省略)
今回はEDB*Plusの簡単な使用方法と合わせてSQL*Plusと異なる点についてもご紹介しました。EDB*Plusは、SQL*Plusと互換性があるものの今回ご紹介したように一部異なる点もあるため、本ブログを参考に相違点を認識した上で使用してみてください。
■本記事の内容について
本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
PostgreSQLのオプティマイザがインデックスを適切に使用できない理由は様々ですが、本記事ではJDBC⇔PostgreSQL間でデータ型の不一致がインデックスの使用にどういった悪影響を及ぼすかを見ていきます
EDB Postgres Workload Reportsは、Postgresデータベースのパフォーマンス診断とトラブルシューティングを強化する新しいツールです。OracleのAWRに似た詳細なレポートを提供し、データベースの問題を迅速に特定・解決できるようサポートします。本記事では概要と利用手順をご紹介します。
35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載10回目となる今回の記事では、OSS-DB Gold試験対策問題集 出版の経緯や内容を 新校長 我妻にインタビューしました。