JP2002342110A - プログラム解析装置及びそのプログラム並びにプログラム記録媒体 - Google Patents
プログラム解析装置及びそのプログラム並びにプログラム記録媒体Info
- Publication number
- JP2002342110A JP2002342110A JP2001147298A JP2001147298A JP2002342110A JP 2002342110 A JP2002342110 A JP 2002342110A JP 2001147298 A JP2001147298 A JP 2001147298A JP 2001147298 A JP2001147298 A JP 2001147298A JP 2002342110 A JP2002342110 A JP 2002342110A
- Authority
- JP
- Japan
- Prior art keywords
- sql
- program
- sentence
- statement
- source code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
グラムのソースコードを解析することにより、プログラ
ム中にSQL文として現れないものまで含めて、早期に
問題のあるSQL文を抽出することを目的とする。 【解決手段】 第1のSQL文抽出手段21は、プログ
ラムのソースコード1を解析して、プログラム中に記述
されておらず、かつ、プログラムの実行時に発行される
可能性のあるSQL文を抽出する。問題SQL文検出手
段7は、第1のSQL文抽出手段21により抽出された
SQL文の中から、予め定められた検出条件に該当する
ものを、問題のあるSQL文として抽出する。
Description
置及びそのプログラム並びにプログラム記録媒体に関
し,特に,プログラムのソースコードを解析してプログ
ラムに現れないSQL文までを含めて問題の有無を検出
するプログラム解析装置及びそのプログラム並びにプロ
グラム記録媒体に関する。
発を終了した段階で,その性能評価(主に,実行時間の
評価)を行い,その結果,問題があれば,当該プログラ
ムを改善する必要がある。例えば,実行時間が長けれ
ば,当該プログラムの実行時間を短縮する必要がある。
そこで,従来から,プログラムが発行するSQL(Stru
ctured Query Language )の情報を収集することが行わ
れている。
る手段によれば,収集されるタイミングは,プログラム
実行時に限られる。即ち,プログラムをコンパイルして
実行可能な形式に直して,始めてデータベースを利用す
る設定が完了する。従って,この時点までは,SQLの
情報を収集することができない。これでは,プログラム
の性能評価の時点がほぼ開発工程の最終段階となり,プ
ログラム修正のコストが高くなってしまう。
段階でSQLの情報を収集し,問題のあるSQLの検出
を行うことも提案されている(例えば,特開平4−11
2334号)。しかし,このような従来の技術によれ
ば,プログラム中に現に現れる個々のSQL文自体の良
否を判断するのみである。即ち,プログラム中にSQL
文として記述されている文についてのみを検出し,その
記述についての文法エラーの有無をチェックするのみで
ある。
L文として記述された文についてはチェックすることが
できた。しかし,プログラム中にSQL文としての記述
はないが,当該記述によって発行される可能性のあるS
QL文については,その情報を収集することができない
ので,全くチェックすることができなかった。従って,
このようなプログラム中に現れないSQL文にエラーが
あったり,その記述が最適化されていない結果,これが
性能向上(実行時間の短縮)の障害となっている場合,
その原因を特定することは極めて難しかった。特に,プ
ログラム中にSQL文として現れないため,プログラム
中におけるその位置が特定できない結果,プログラムの
問題解析に非常に多くの時間を必要としていた。
おいて,プログラム中でのSQL文の発行頻度,インデ
ックスの有無等のデータベースのテーブルの定義,デー
タベースに蓄積されたデータ量等が考慮されることはな
かった。例えば,SQL文の発行頻度が少なかったり,
データベースのテーブルにインデックスの定義があった
り,データベースに蓄積されたデータ量等が少なけれ
ば,たとえSQL文の記述が最適化されていないとして
も,プログラム全体の実行時間から見て問題となる可能
性は少ない。従って,問題の有るSQL文であるとして
チェックする必要はない。
析することにより,プログラム中にSQL文として現れ
ないものまで含めて,早期に問題の有るSQL文を抽出
するプログラム解析装置を提供することを目的とする。
ドを解析することにより,プログラム中にSQL文とし
て現れないものまで含めて,早期に問題の有るSQL文
を抽出するプログラム解析装置を実現するプログラムを
提供することを目的とする。
ドを解析することにより,プログラム中にSQL文とし
て現れないものまで含めて,早期に問題の有るSQL文
を抽出するプログラム解析装置を実現するプログラムを
記録したプログラム記録媒体を提供することを目的とす
る。
装置は,プログラムのソースコードを解析してSQL文
を抽出する。プログラム解析装置は,プログラムのソー
スコードを解析して,プログラム中に記述されておら
ず,かつ,プログラムの実行時に発行される可能性のあ
るSQL文を抽出する第1のSQL文抽出手段を備え
る。本発明のプログラム及びプログラム記録媒体は,こ
のようなプログラム解析装置を実現するプログラム及び
これをフロッピィディスク等種々の媒体に記録したプロ
グラム記録媒体を提供する。
ば,本発明のプログラム解析装置は,第1のSQL文抽
出手段により抽出されたSQL文の中から,予め定めら
れた検出条件に該当するものを,問題の有るSQL文と
して抽出する問題SQL文検出手段を備える。
ログラムのソースコードを解析することにより,プログ
ラム中にSQL文として現れないものまで含めて,プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出することができる。従って,このようなプログラム中
に現れないSQL文がプログラムの性能向上(実行時間
の短縮)の障害となっている場合でも,プログラム中に
おけるその位置が特定でき,その原因を容易に特定する
ことができる。
ば,抽出したSQL文の中から,予め定められた検出条
件に該当するものを,問題の有るSQL文として抽出す
ることができる。例えば,発行頻度が多いSQL文,イ
ンデックスの定義がないデータベースのテーブルについ
ての処理を行うSQL文,蓄積されたデータ量等が多い
データベースについての処理を行うSQL文等について
のみを,問題の有るSQL文であるとしてチェックする
ことができる。従って,プログラム全体の実行時間から
見て問題となる可能性の高いSQL文のみを抽出して,
プログラムの性能改善を有効に行うことができる。
であり,本発明のプログラム解析装置の構成を示す。
スコード1を解析してSQL文を抽出する。このため
に,プログラム解析装置はSQL文抽出部2を備える。
SQL文抽出部2は,プログラムのソースコード1が入
力されると,これを解析してSQL文を抽出する。SQ
L文抽出部2は,第1のSQL文抽出手段21及び第2
のSQL文抽出手段22を備える。
ムのソースコード1を解析して,プログラムのソースコ
ード1中に記述されておらず,かつ,プログラムの実行
時に発行される可能性のあるSQL文を抽出する。第1
のSQL文抽出手段21は,後述するように,プログラ
ムの実行時に発行される可能性のあるSQL文の構成要
素となる文字列変数を合成することにより,発行される
可能性のあるSQL文を抽出する。第2のSQL文抽出
手段22は,プログラムのソースコード1を解析して,
その中に記述されたSQL文を抽出する。即ち,第2の
SQL文抽出手段22は,プログラムのソースコード1
中に,実際にSQL文として記述されたもの(SQL
文)を抽出する。なお,このような実際に記述されたS
QL文は容易に発見できるので,第2のSQL文抽出手
段22を省略してもよい。
発行箇所情報4とを出力する。SQL文群3は,第1及
び第2のSQL文抽出手段21及び22が抽出した(1
又は複数の)SQL文からなる。SQL発行箇所情報4
は,SQL文群3におけるSQL文の各々について,プ
ログラムのソースコード1中におけるその発行箇所(位
置)を示す情報である。
発が完了した時点で,これをプログラム解析装置(のS
QL文抽出部2)に入力して,SQL文群3とSQL発
行箇所情報4とを,プログラム解析装置の出力として問
題SQL文情報出力部10から得ることができる。これ
により,SQL文の内容及びその位置を知ることができ
るので,プログラムの開発の早期の段階で,当該プログ
ラムを評価することができる。この場合には,プログラ
ムの実行時に発行される可能性のあるSQL文の全て
と,ソースコード1に実際に記述されているSQL文の
全てとの双方のチェックが行われることになる。
置は,SQL文群3等をそのまま出力するのではなく,
実際のプログラムの性能(実行時間の評価)上,問題の
ありそうなSQL文を抽出して出力する。即ち,プログ
ラムの実行時間の短縮化の観点から見てその障害となっ
ている可能性のある(高い)と思われるSQL文を抽出
することができる。このために,プログラム解析装置は
問題SQL文検出手段である問題SQL文検出部7を備
える。
入力されると,これに含まれるSQL文の中から,予め
定められた検出条件に該当するものを,問題の有るSQ
L文として抽出する。従って,問題SQL文検出部7
は,少なくとも,第1のSQL文抽出手段21により抽
出されたSQL文の中から,予め定められた検出条件に
該当するものを,問題の有るSQL文として抽出する。
ログラムの実行時間の短縮化の障害となっている可能性
のあると思われるSQL文を指す。従って,経験的に実
行時間の短縮化の(無視できない)障害となるであろう
(即ち,一定の条件に該当する)SQL文を,「問題の
有るSQL文」として取り扱えば足りる。そこで,問題
SQL文検出部7において問題の有るSQL文を抽出す
るために,検出条件が予め定められ,問題SQL文検出
部7に与えられる。
処理対象とするデータベース(リレーショナルデータベ
ース)におけるインデックスの有無を示す情報51,S
QL文が処理対象とするデータベースに格納されたデー
タ量を示す情報52,SQL文の発行頻度(の予測値)
が用いられる。前2者はデータベース情報5に含まれ
る。データベース情報5は当該データベースについての
種々の管理情報を格納し,当該データベースに付随して
予め用意される。SQL文の発行頻度は,SQL文発行
頻度予測手段であるSQL文発行頻度予測部6により生
成される。
箇所情報4が入力されると,各々のSQL文についての
発行頻度(の予測値)を生成する。即ち,プログラムの
ソースコード1に記述された繰り返し制御文に基づい
て,繰り返し制御文により実行される当該繰り返しのル
ープ内に存在するSQL文の発行頻度を予測する。SQ
L文の発行頻度は問題SQL文検出手段である問題SQ
L文検出部7に入力される。
度予測部6により予測されたSQL文の発行頻度が所定
の値以上である場合,当該繰り返しのループ内に存在す
るSQL文を問題の有るSQL文として抽出する。SQ
L文の発行頻度が所定の値よりも小さい場合,当該SQ
L文は,問題の有るSQL文ではない(問題のないSQ
L文である)とされる。即ち,問題SQL文検出部7
は,当該SQL文を抽出しない(出力しない)。
文が処理対象とするデータベースにおけるインデックス
が無い(付与されていない)場合,当該データベースに
ついてのSQL文を問題の有るSQL文として抽出す
る。データベースにおけるインデックスが有る場合,当
該SQL文は,問題の有るSQL文ではないとされ,問
題SQL文検出部7によりSQL文を抽出されない。
SQL文が処理対象とするデータベースに格納されたデ
ータ量が所定の値以上の場合,当該データベースについ
てのSQL文を問題の有るSQL文として抽出する。デ
ータ量が所定の値よりも小さい場合,当該SQL文は,
問題の有るSQL文ではないとされ,問題SQL文検出
部7によりSQL文を抽出されない。
出のために上述の3個の検出条件を上述の順に用いる
が,問題の有るSQL文の抽出手順はこれに限られな
い。例えば,上述の3個の検出条件を順序を替えて用い
てもよく,いずれか2個の検出条件をその順序を変更し
て組み合わせて用いてもよく,いずれか1個の検出条件
のみを用いてもよい。また,上述の3個の検出条件以外
の1又は複数の検出条件を用いてもよく,上述の3個の
検出条件とこれら以外の1又は複数の検出条件との中か
ら1又は複数の検出条件を組み合わせて用いてもよい。
発が完了した時点で,前述のようにしてSQL文群3と
SQL発行箇所情報4とを得て,更にこれらをSQL文
発行頻度予測部6及び問題SQL文検出部7に前述のよ
うに入力する。これにより,プログラム解析装置の出力
として,1又は複数の「問題の有るSQL文」を問題S
QL文情報出力部10から得ることができる。この場合
も,SQL文の内容及びその位置を知ることができるの
で,プログラムの開発の早期の段階で,当該プログラム
を評価することができる。この場合には,プログラムの
実行時に発行される可能性のあるSQL文とソースコー
ド1に実際に記述されているSQL文との双方から「問
題の有るSQL文」として抽出されたSQL文のみのチ
ェックが行われることになる。即ち,短時間で効果的に
プログラムの性能を改善する(実行時間を短縮する)こ
とができる。
置は,問題の有るSQL文(プログラムの性能向上の障
害となっている可能性のあるSQL文)のみを出力する
のではなく,実際のプログラムの実行において発行され
たSQL文について,ソースコード1におけるその位置
をも抽出して出力する。このために,プログラム解析装
置は,実行時SQL発行情報8とSQL発行箇所特定手
段であるSQL発行箇所特定部9とを備える。
実行時において実際に発行されたSQL文からなる。即
ち、ソースコード1は、コンパイラ等により実行形式
(実際に発行されたSQL文を含む)に変換された後、
データベース管理システムを介してデータベースにアク
セスする(図示せず)。この時,実際に発行されたSQ
L文を,通常のデータベース管理システムが備える周知
のSQL文についての収集手段により,収集することが
できる。
発行情報8が入力されると,これに基づいて,当該SQ
L文の各々について,プログラムのソースコード1にお
けるその位置を特定する。また,SQL発行箇所特定部
9は,SQL文群3及びSQL発行箇所情報4が入力さ
れると,これらに基づいて,SQL文群3に含まれるS
QL文の各々について,プログラムのソースコード1に
おけるその位置を特定する。SQL発行箇所特定部9に
よるSQL文の位置についての情報は,問題SQL文情
報出力部10から出力される。
ソースコード1における位置を,特に解析の手間なく,
容易に知ることができる。そして,実際に発行されたS
QL文のソースコード1における位置を,SQL文群3
に含まれるSQL文の各々のソースコード1における位
置と,容易に比較することができる。従って,事後的で
はあるが,SQL文が実際のプログラムの実行時にどの
ように障害となるかについての情報を簡単に収集するこ
とができる。この情報は,プログラムの開発に生かされ
ると共に,問題SQL文検出部7における検出条件の設
定に反映される。これにより,当該検出条件を最適化す
ることができる。
を例に,本発明のプログラム解析について具体的に説明
する。
によるSQL文の抽出対象となるプログラムのソースコ
ード1を示す。
vaで記述されている。プログラム名をA.javaとする。
ソースコード1について簡単に説明すると,2行目から
のメソッドf1の中でメソッドsearchが呼び出される(6
行目)。その際,メソッドf1の中の4行目及び5行目で
宣言したString型変数を引数に渡す。この引数であるSt
ring型変数が,メソッドsearchの中で発行されるSQL
文を構成する文字列である。9行目からのメソッドf2も
ほぼ同様である。但し,メソッドf2は,メソッドf1とは
異なる引数でメソッドsearchを呼び出す(12行目)。
即ち,ここでの引数は文字列そのものであり,これがS
QL文を構成する文字列となる。なお,メソッドsearch
の呼び出しは,11行目から14行目までの繰り返し制
御文(while 文)の中に存在する。SQL文に直接関連
する記述は19行目及び20行目に存在し,20行目の
記述によりデータベースがアクセスされる。
SQL文がソースコード1の中に記述されているのでは
なく,プログラムの実行時に発行される可能性があるS
QL文の例を示す。また,ソースコード1はSQL文と
して記述された部分(SQL文)を含んでいない。
り,本発明によるプログラムの解析処理の概略を示す。
SQL文抽出部2に入力されると(ステップS11),
これをSQL文抽出部2が解析して,SQL文群3及び
SQL発行箇所情報4を生成する(ステップS12)。
SQL発行箇所情報4がSQL文発行頻度予測部6に入
力されると(ステップS13),これに基づいてSQL
文発行頻度予測部6がSQL文の発行頻度を予測して,
その結果を問題SQL文検出部7に入力する(ステップ
S14)。これに応じて,問題SQL文検出部7が,デ
ータベース情報5(データベースに格納されたインデッ
クスの有無を示す情報51及びデータ量を示す情報5
2)とSQL文の発行頻度とに基づいて,問題の有るS
QL文を抽出し,問題SQL文情報出力部10に入力す
る(ステップS15)。問題SQL文情報出力部10
は,抽出されたSQL文を出力する(ステップS1
6)。
行時に実際に発行されたSQL文についての情報を実行
時SQL発行情報8として得て,これをSQL発行箇所
特定部9に入力する(ステップS17)。これに応じ
て,SQL発行箇所特定部9が,発行されたSQL文に
ついてソースコード1における位置を特定しSQL文群
3及びSQL発行箇所情報4を読み出してこれらに基づ
いてSQL文群3に含まれるSQL文についてソースコ
ード1における位置を特定し,問題SQL文情報出力部
10に入力する(ステップS18)。問題SQL文情報
出力部10はSQL文の各々の位置を出力する(ステッ
プS19)。
ステップS12においてSQL文抽出部2の実行するS
QL文の抽出処理を示す。
つけ出して,SQL文を表す(構成する)変数を抽出す
る(ステップS21)。例えば,図2のソースコード1
について見ると,SQL文発行箇所としてデータベース
へのアクセスを実行するexecute Query の存在する20
行目の文を検出し,当該行の中から値がSQL文である
文字列型変数sqlStrを抽出する。
プS22)。例えば,図2のソースコード1について見
ると,抽出した変数sqlStrに対する代入値として,19
行目の変数sqlStrの定義文を参照して,その定義の部分
(=の右の部分)から,”SELECT”+col +”FROM”+
table を抽出する。ここで,col は,データベースの列
の名前であり,当該SQL文が検索条件で指定する。ta
ble は,データベースのテーブル名であり,当該SQL
文の検索対象である。
帰的に解析し,定数からなる代入値の組を取得する(ス
テップS23)。例えば,図2のソースコード1につい
て見ると,抽出した代入値が2個の変数col 及びtable
を含むので,ソースコード1の実行パスに従って,これ
を解析する。即ち,変数col 及びtable は,18行目に
おいて引数として渡されており,その定義は6行目及び
12行目に存在する。6行目の変数col 及びtable は,
実行パス(メソッドf1からメソッドsearchの呼び出しま
で)を辿ると,4行目及び5行目に文字列TABLE1及びCO
L1として定義される。12行目の変数col 及びtable
は,実行パス(メソッドf2からメソッドsearchの呼び出
しまで)を辿ると,当該12行目に文字列TABLE2及びCO
L2として定義される。従って,代入値の組COL1及びTABL
E1,COL2及びTABLE2が求まる。
3を取得する(ステップS24)。例えば,図2のソー
スコード1について見ると,求めた代入値の組COL1及び
TABLE1を,19行目の変数sqlStrの定義文に組み合わせ
て,SQL文を得る。COL2及びTABLE2についても同様で
ある。これにより,SQL文として,図5(A)に示す
ように,SELECT COL1 FROM TABLE1 を得る。SQL文に
は,各々,一意に定まるIDが付加される。
うに、ソースコード1の中には記述されずプログラムの
実行時に発行される可能性があるSQL文(ID=1及び
ID=2のSQL文)のみを含み,SQL文として記述さ
れた部分(SQL文それ自体)を含んでいない。SQL
文として記述された部分であるSQL文については,ス
テップS21においてその抽出が終了する。即ち、ソー
スコード1からSQL文発行箇所を見つけ出して,SQ
L文それ自体を(前述の変数として)抽出する。SQL
文はSELECT文等の特定の記述からなるので,SQL文で
あるか否かを判断することができる。そこで, SQL文
発行箇所から(変数として)抽出した記述について調べ
て, それがSQL文であるなら,当該抽出した部分(S
QL文)がSQL文群3に格納される。
21において取得される。例えば,図2のソースコード
1について見ると,ステップS21において,前述のよ
うに,SQL文発行箇所(出現位置)としてプログラム
名A.javaの20行目を求め,前述の実行パスを同様にし
て辿りその制御構造を解析する。メソッドf1からメソッ
ドsearchの呼び出しまでについて見ると,繰り返し制御
文がないので,ループなしとされる。メソッドf2からメ
ソッドsearchの呼び出しまでについて見ると,繰り返し
制御文であるwhile 文が1個あるので,1重ループとさ
れる。これにより,図5(B)に示すような構成のSQ
L発行箇所情報4が得られる。SQL文の発行箇所に
は,各々,一意に定まるIDが付加される。図5(A)に
おけるID=1のSQL文の出現位置が,図5(B)にお
けるID=1に示される。
4における制御構造に基づいて,ステップS14におい
て,SQL文発行頻度予測部6は,前述の実行パスを同
様に辿り,SQL文の発行頻度を予測する。図2のソー
スコード1において,ID=1であるSQL文(メソッド
f1からメソッドsearchの呼び出しまで)について見る
と,ループがないので,このSQL文の発行回数は「1
回」であると予測する。ID=2であるSQL文(メソッ
ドf2からメソッドsearchの呼び出しまで)について見る
と,1重ループであるので,このSQL文の発行回数は
「当該ループの繰り返しの回数」であると予測する。こ
こでは,例えば,説明の便宜上,繰り返しの回数が10
00回であるとする。
り,ステップS15において問題SQL文検出部7の実
行する問題SQL文の検出処理を示す。
ェック)のSQL文を処理対象として取り出し(ステッ
プS31),当該SQL文についてのSQL文発行頻度
予測部6による発行頻度が所定の値以上か否かを調べる
(ステップS32)。所定の値以上でない場合,当該S
QL文についての処理は終了し,SQL文群3の中に未
チェックのSQL文が残っているか否かを調べる(ステ
ップS37)。残っている場合,ステップS31以下を
繰り返す。残っていない場合,検出処理を終了する。
的に定まるが,例えば1000回とされる。図2のソー
スコード1について見ると,ID=1であるSQL文の発
行頻度は1回であるので,このSQL文についての処理
は終了する。一方,ID=2であるSQL文の発行頻度1
000回であるので,このSQL文についての処理はス
テップS33へ進む。
値以上である場合,データベース情報5のテーブル定義
から,当該SQL文の検索対象のテーブル名と検索条件
で指定されている列の名前を取得し(ステップS3
3),当該列についてのインデックスの有無を示す情報
51からインデックスが無いか否かを調べる(ステップ
S34)。インデックスが有る場合,当該SQL文につ
いての処理は終了し,ステップS37を実行する。
報5のテーブル定義の一例を図5(C)に示す。テーブ
ル定義は,当該データベースのテーブル毎に,列の名
前,インデックスの有無からなる列情報を格納する。図
2のソースコード1について見ると,ID=2であるSQ
L文の対象とするテーブル名であるTABLE2において,当
該SQL文の指定する列であるCOL2には,インデックス
が付加されていない。従って,ID=2であるSQL文に
ついての処理はステップS35へ進む。
ース情報5のデータ量から,当該データ量を取得し,こ
れが所定の値以上か否かを調べる(ステップS35)。
所定の値以上でない場合,当該SQL文についての処理
は終了し,ステップS37を実行する。所定の値以上で
ある場合,当該SQL文を問題の有るSQL文として検
出する(ステップS36)。この後,ステップS37を
実行する。
的に定まるが,例えば10000件とされる。ステップ
S35で取得するデータベース情報5のデータ量の一例
を図5(D)に示す。データ量は,当該データベースの
テーブル毎に,それが格納するデータ量(を示す情報5
2)を格納する。図2のソースコード1について見る
と,ID=2であるSQL文の対象とするテーブル名であ
るTABLE2のデータ量は50000件である。従って,こ
のデータ量は所定の値よりも大きいので,ステップS3
6において,ID=2であるSQL文が問題の有るSQL
文として抽出される。
て見ると,図7に示すように,2個のSQL文を含むS
QL文群3から,ID=2として特定される1個のSQL
文が検出される。即ち,発行頻度が所定の値以上であ
り,インデックスの無い列COL2を使用し,対象テーブル
TABLE2のデータ量が所定の値以上のSQL文が検出され
る。なお,図7においては,SQL文の実際の記述を示
し,WHERE以下は検索条件を示す。図7における検出結果
が、ステップS16において,問題SQL文情報出力部
10から問題の有るSQL文として出力される。
ル等して実行形式に変換して実行する。この時,実行形
式とされたソースコード1には実際に発行されたSQL
文が含まれる。図2の例の場合,前述のID=1及びID=
2である2個のSQL文が発行される。実行時に,これ
ら2個のSQL文についての情報(実行時SQL発行情
報8)がデータベース管理システムから得られる。
行情報8の一例を図8に示す。実行時SQL発行情報8
は,実際に発行されたSQL文毎に,その処理に要した
時間を格納する。
発行情報8が入力される(ステップS17)と,これと
SQL文群3とを比較して,同一の記述内容のSQL文
(のID)を求め, これに基づいてSQL発行箇所情報4
を参照して, 求めたSQL文の発行箇所を求める(ステ
ップS18)。これにより,実行時SQL発行情報8に
存在するSQL文のソースコード1における発行箇所
は, 「プログラム名A.javaの20行目」に存在すること
が特定される。なお,SQL文群3及びSQL発行箇所
情報4を共に出力してもよい。
れば,SQL文のソースコード1 における位置を容易に
特定することができる。例えば、実行時SQL発行情報
8において実行時間が10秒もかかっているSQL文
(ID=2であるSQL文)の位置が,プログラム名A.ja
vaの20行目に存在することを,簡単に知ることができ
る。特に,ソースコード1中にSQL文として記述され
ていなくても,実際に発行されたSQL文の発行箇所を
簡単に知ることができる。これにより,当該プログラム
の実行時間が短縮できない原因を知り,その性能改善を
行うことができる。なお,従来は,ソースコード1中に
SQL文として記述されていなけれ,ソースコード1を
1行ずつ解析する他に原因究明の手段がなかった。
題SQL文情報出力部10から出力された問題の有るS
QL文(ID=2であるSQL文)を除去しなかった場合
の例である。ステップS16の結果に基づいて,ソース
コード1におけるID=2であるSQL文を改善すれば,
プログラムの実行時間を短縮することができる。例え
ば、実行パスを逆に辿って,プログラム名A.javaの20
行目から1重ループの11行目乃至14行目の記述やメ
ソッドsearchの記述を適宜変更する。これにより, 当該
SQL文に起因する実行時間を少しでも短縮することが
できる。即ち、プログラムのソースコード1が完成した
時点で直ちに本発明により問題の有るSQL文を検出す
れば,開発工程の早期の段階でプログラムの最適化によ
る性能向上(実行時間の短縮)を図ることができる。
ると以下のとおりである。 (付記1) プログラムのソースコードを解析してSQ
L文を抽出するプログラム解析装置であって,前記プロ
グラムのソースコードを解析して,前記プログラム中に
記述されておらず,かつ,前記プログラムの実行時に発
行される可能性のあるSQL文を抽出する第1のSQL
文抽出手段を備えることを特徴とするプログラム解析装
置。 (付記2) 前記第1のSQL文抽出手段が,前記プロ
グラムの実行時に発行される可能性のあるSQL文の構
成要素となる文字列変数を合成することにより,前記発
行される可能性のあるSQL文を抽出することを特徴と
する付記1に記載のプログラム解析装置。 (付記3) 当該プログラム解析装置が,更に,前記プ
ログラムのソースコードを解析して,その中に記述され
た前記SQL文を抽出する第2のSQL文抽出手段を備
えることを特徴とする付記1に記載のプログラム解析装
置。 (付記4) 当該プログラム解析装置が,更に,前記第
1のSQL文抽出手段により抽出されたSQL文の中か
ら,予め定められた検出条件に該当するものを,問題の
有るSQL文として抽出する問題SQL文検出手段を備
えることを特徴とする付記1に記載のプログラム解析装
置。 (付記5) 当該プログラム解析装置が,更に,データ
ベースに格納されたデータ量を示す情報を含むデータベ
ース情報を備え,前記問題SQL文検出手段が,前記検
出条件として前記データ量を示す情報を用いて,前記デ
ータ量が所定の値以上の場合に,前記データベースにつ
いてのSQL文を前記問題の有るSQL文として抽出す
ることを特徴とする付記4に記載のプログラム解析装
置。 (付記6) 当該プログラム解析装置が,更に,データ
ベースにおけるインデックスの有無を示す情報を含むデ
ータベース情報を備え,前記問題SQL文検出手段が,
前記検出条件として前記インデックスの有無を示す情報
を用いて,前記インデックスが無い場合に,前記データ
ベースについてのSQL文を前記問題の有るSQL文と
して抽出することを特徴とする付記4に記載のプログラ
ム解析装置。 (付記7) 当該プログラム解析装置が,更に,前記プ
ログラムのソースコードに記述された繰り返し制御文に
基づいて,当該繰り返しのループ内に存在するSQL文
の発行頻度を予測するSQL文発行頻度予測手段を備
え,前記問題SQL文検出手段が,前記検出条件として
前記SQL文発行頻度予測手段により予測された前記発
行頻度を用いて,前記発行頻度が所定の値以上の場合
に,前記繰り返しのループ内に存在するSQL文を前記
問題の有るSQL文として抽出することを特徴とする付
記4に記載のプログラム解析装置。 (付記8) 当該プログラム解析装置が,更に,プログ
ラムの実行時において実際に発行されたSQL文からな
るSQL発行情報と,前記SQL発行情報に基づいて,
当該SQL文の各々について,当該SQL文のソースコ
ードにおける位置を特定するSQL発行箇所特定手段と
を備えることを特徴とする付記1に記載のプログラム解
析装置。 (付記9) 前記SQL発行箇所特定手段が,前記第1
及び第2のSQL文抽出手段により抽出されたSQL文
の各々について,当該SQL文のソースコードにおける
位置を特定することを特徴とする付記8に記載のプログ
ラム解析装置。 (付記10) プログラムのソースコードを解析して,
前記プログラム中に記述されておらず,かつ,前記プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出する処理をコンピュータに実行させることを特徴とす
るプログラム。 (付記11) プログラムのソースコードを解析して,
前記プログラム中に記述されておらず,かつ,前記プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出する処理をコンピュータに実行させるプログラムを記
録したことを特徴とするプログラム記録媒体。
プログラム解析装置において,プログラム中に記述され
ておらずかつプログラムの実行時に発行される可能性の
あるSQL文を抽出することにより,このようなプログ
ラム中に現れないSQL文がプログラムの性能向上の障
害となっている場合でも,プログラム中におけるその位
置が特定でき,その原因を容易に特定することができ
る。
ば,プログラム解析装置において,抽出したSQL文の
中から予め定められた検出条件に該当するものを問題の
有るSQL文として抽出することにより,プログラム全
体の実行時間から見て問題となる可能性の高いSQL文
のみを抽出して,プログラムの性能改善を有効に行うこ
とができる。
Claims (5)
- 【請求項1】 プログラムのソースコードを解析してS
QL文を抽出するプログラム解析装置であって,前記プ
ログラムのソースコードを解析して,前記プログラム中
に記述されておらず,かつ,前記プログラムの実行時に
発行される可能性のあるSQL文を抽出する第1のSQ
L文抽出手段を備えることを特徴とするプログラム解析
装置。 - 【請求項2】 当該プログラム解析装置が,更に,前記
第1のSQL文抽出手段により抽出されたSQL文の中
から,予め定められた検出条件に該当するものを,問題
の有るSQL文として抽出する問題SQL文検出手段を
備えることを特徴とする請求項1に記載のプログラム解
析装置。 - 【請求項3】 当該プログラム解析装置が,更に,前記
プログラムのソースコードに記述された繰り返し制御文
に基づいて,当該繰り返しのループ内に存在するSQL
文の発行頻度を予測するSQL文発行頻度予測手段を備
え,前記問題SQL文検出手段が,前記検出条件として
前記SQL文発行頻度予測手段により予測された前記発
行頻度を用いて,前記発行頻度が所定の値以上の場合
に,前記繰り返しのループ内に存在するSQL文を前記
問題の有るSQL文として抽出することを特徴とする請
求項2に記載のプログラム解析装置。 - 【請求項4】 プログラムのソースコードを解析して,
前記プログラム中に記述されておらず,かつ,前記プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出する処理をコンピュータに実行させることを特徴とす
るプログラム。 - 【請求項5】 プログラムのソースコードを解析して,
前記プログラム中に記述されておらず,かつ,前記プロ
グラムの実行時に発行される可能性のあるSQL文を抽
出する処理をコンピュータに実行させるプログラムを記
録したことを特徴とするプログラム記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001147298A JP2002342110A (ja) | 2001-05-17 | 2001-05-17 | プログラム解析装置及びそのプログラム並びにプログラム記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001147298A JP2002342110A (ja) | 2001-05-17 | 2001-05-17 | プログラム解析装置及びそのプログラム並びにプログラム記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2002342110A true JP2002342110A (ja) | 2002-11-29 |
Family
ID=18992806
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001147298A Pending JP2002342110A (ja) | 2001-05-17 | 2001-05-17 | プログラム解析装置及びそのプログラム並びにプログラム記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2002342110A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009259141A (ja) * | 2008-04-21 | 2009-11-05 | Jfe Steel Corp | アプリケーションプログラム作成支援装置、データベースシステム、アプリケーションプログラム作成支援方法およびそのプログラム |
WO2011151931A1 (ja) * | 2010-06-02 | 2011-12-08 | 株式会社日立製作所 | アプリケーションの解析方法、解析システム及び記録媒体 |
JP2018532171A (ja) * | 2016-09-28 | 2018-11-01 | 平安科技(深▲せん▼)有限公司 | Sql審査方法、サーバ及び記憶デバイス |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04112334A (ja) * | 1990-09-03 | 1992-04-14 | Nippon Telegr & Teleph Corp <Ntt> | Sqlステートメント意味解析実現方式 |
JPH11265306A (ja) * | 1998-03-16 | 1999-09-28 | Ntt Data Corp | 処理能力概算装置、処理能力概算方法及び記録媒体 |
JP2000259723A (ja) * | 1999-03-09 | 2000-09-22 | Toshiba Corp | 情報関係チューニング装置及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体 |
-
2001
- 2001-05-17 JP JP2001147298A patent/JP2002342110A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04112334A (ja) * | 1990-09-03 | 1992-04-14 | Nippon Telegr & Teleph Corp <Ntt> | Sqlステートメント意味解析実現方式 |
JPH11265306A (ja) * | 1998-03-16 | 1999-09-28 | Ntt Data Corp | 処理能力概算装置、処理能力概算方法及び記録媒体 |
JP2000259723A (ja) * | 1999-03-09 | 2000-09-22 | Toshiba Corp | 情報関係チューニング装置及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009259141A (ja) * | 2008-04-21 | 2009-11-05 | Jfe Steel Corp | アプリケーションプログラム作成支援装置、データベースシステム、アプリケーションプログラム作成支援方法およびそのプログラム |
WO2011151931A1 (ja) * | 2010-06-02 | 2011-12-08 | 株式会社日立製作所 | アプリケーションの解析方法、解析システム及び記録媒体 |
JP2011253363A (ja) * | 2010-06-02 | 2011-12-15 | Hitachi Ltd | アプリケーションの解析方法、解析システム及び解析プログラム |
US8898649B2 (en) | 2010-06-02 | 2014-11-25 | Hitachi, Ltd. | Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program |
JP2018532171A (ja) * | 2016-09-28 | 2018-11-01 | 平安科技(深▲せん▼)有限公司 | Sql審査方法、サーバ及び記憶デバイス |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20040221262A1 (en) | Processing macro information and displaying via GUI in different tools | |
US8566810B2 (en) | Using database knowledge to optimize a computer program | |
US7424646B2 (en) | Imposing a logical structure on an unstructured trace record for trace analysis | |
US20050114842A1 (en) | System and method for whole-system program analysis | |
US20120198423A1 (en) | Code Path Tracking | |
JP3280332B2 (ja) | ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法 | |
CN110851830B (zh) | 基于指令格式识别的面向cpu未公开指令发现方法 | |
CN113468525B (zh) | 针对二进制程序的相似漏洞检测方法及装置 | |
CN107220175B (zh) | 应用程序死循环定位方法、装置、计算机设备和存储介质 | |
US20030101336A1 (en) | Technique for associating instructions with execution events | |
CN111914260A (zh) | 一种基于函数差分的二进制程序漏洞检测方法 | |
CN101895517A (zh) | 一种脚本语义提取方法和提取装置 | |
JP2002342110A (ja) | プログラム解析装置及びそのプログラム並びにプログラム記録媒体 | |
CN101373506B (zh) | 一种基于漏洞模型的软件漏洞模型检测方法 | |
EP2599042A1 (en) | Systems and methods of rapid business discovery and transformation of business processes | |
US8090990B2 (en) | Abnormal pattern detection program for function call in source program | |
CN113918948B (zh) | 一种基于语义分析的无害化处理识别方法 | |
CN110688303A (zh) | 一种基于一体化开发平台的软件工件关系的挖掘方法 | |
JP3550748B2 (ja) | コンパイラ装置 | |
US7844627B2 (en) | Program analysis method and apparatus | |
WO2021104027A1 (zh) | 代码性能检测方法、装置、设备及存储介质 | |
JP4055197B2 (ja) | プログラムに含まれる手続きの解析装置 | |
Akbari et al. | Vulnerability detector using parse tree annotation | |
Henry et al. | Complexity measurement of a graphical programming language | |
CN106547531A (zh) | 基于php的应用性能管理方法及其模块 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071219 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20091013 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100427 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100625 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20100625 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20100625 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100720 |