7.11.5. JPAの性能情報プロファイルデータ

インメモリデータグリッド連携部品では、性能情報採取機能によりJPAの性能情報を採取し、ランキング情報を生成することにより、パフォーマンスチューニングに必要なプロファイルデータを提供します。
また、ランキング情報は、データプリロードの読み込む順序として利用することができます。
情報採取は、ドメイン単位で行います。

7.11.5.1. 性能情報採取対象

性能情報採取機能では、JPAアプリケーションに組み込まれた以下のクラスのメソッドが性能情報の採取対象となります。

表3.7.12.5-1 性能情報対象メソッド一覧
クラス名 javax.persistence.EntityManager
メソッド名
public void persist(Object entity)
public <T> T merge(T entity)
public void remove(Object entity)
public <T> T find(Class<T> entityClass, Object primaryKey)
public <T> T find(Class<T> entityClass, Object primaryKey, Map<String, Object> properties)
public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode)
public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode, Map<String, Object> properties)
public <T> T getReference(Class<T> entityClass, Object primaryKey)
public void flush()
public void lock(Object entity, LockModeType lockMode)
public void lock(Object entity, LockModeType lockMode, Map<String, Object> properties)
public void refresh(Object entity)
public void refresh(Object entity, Map<String, Object> properties)
public void refresh(Object entity, LockModeType lockMode)
public void refresh(Object entity, LockModeType lockMode, Map<String, Object> properties)
public void detach(Object entity)
public boolean contains(Object entity)
public LockModeType getLockMode(Object entity)
public Query createQuery(String qlString)
public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery)
public <T> TypedQuery<T> createQuery(String qlString, Class<T> resultClass)
public Query createNamedQuery(String name)
public <T> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass)
public Query createNativeQuery(String sqlString)
public Query createNativeQuery(String sqlString, Class resultClass)
public Query createNativeQuery(String sqlString, String resultSetMapping)
public void joinTransaction()
public void close()
public EntityTransaction getTransaction()
クラス名 javax.persistence.Query
メソッド名
List getResultList()
Object getSingleResult()
int executeUpdate()
Query setMaxResults(int maxResult)
int getMaxResults()
Query setFirstResult(int startPosition)
int getFirstResult()
クラス名 javax.persistence.TypedQuery
メソッド名
List<X> getResultList()
X getSingleResult()
TypedQuery<X> setMaxResults(int maxResult)
TypedQuery<X> setFirstResult(int startPosition)
クラス名 javax.persistence.EntityTransaction
メソッド名
public void begin()
public void commit()
public void rollback()
クラス名 javax.persistence.Cache
メソッド名
public boolean contains(Class cls, Object primaryKey)
public void evict(Class cls, Object primaryKey)
public void evict(Class cls)
public void evictAll()
クラス名 javax.persistence.PersistenceUnitUtil
メソッド名
public Object getIdentifier(Object entity)
クラス名 javax.persistence.criteria.CriteriaQuery
メソッド名
CriteriaQuery<T< select(Selection<? extends T< selection)
CriteriaQuery<T> multiselect(Selection<?<... selections)
CriteriaQuery<T> multiselect(List<Selection<?<< selectionList)
CriteriaQuery<T> where(Expression<Boolean> restriction)
CriteriaQuery<T> where(Predicate... restrictions)
CriteriaQuery<T> groupBy(Expression<?<... grouping)
CriteriaQuery<T> groupBy(List<Expression<?<< grouping)
CriteriaQuery<T> having(Expression<Boolean> restriction)
CriteriaQuery<T> having(Predicate... restrictions)
CriteriaQuery<T> orderBy(Order... o)
CriteriaQuery<T> orderBy(List<Order> o)
CriteriaQuery<T> distinct(boolean distinct)
List<Order> getOrderList()
Set<ParameterExpression<?>> getParameters()
クラス名 avax.persistence.criteria.Subquery
メソッド名
Subquery<T> select(Expression<T> expression)
Subquery<T> where(Expression<Boolean> restriction)
Subquery<T> where(Predicate... restrictions)
Subquery<T> groupBy(Expression<?>... grouping)
Subquery<T> groupBy(List<Expression<?>> grouping)
Subquery<T> having(Expression<Boolean> restriction)
Subquery<T> having(Predicate... restrictions)
Subquery<T> distinct(boolean distinct)
<Y> Root<Y> correlate(Root<Y> parentRoot)
<X, Y> Join<X, Y> correlate(Join<X, Y> parentJoin)
<X, Y> CollectionJoin<X, Y> correlate(CollectionJoin<X, Y> parentCollection)
<X, Y> SetJoin<X, Y> correlate(SetJoin<X, Y> parentSet)
<X, Y< ListJoin<X, Y> correlate(ListJoin<X, Y> parentList)
<X, K, V< MapJoin<X, K, V< correlate(MapJoin<X, K, V< parentMap)
AbstractQuery<?> getParent()
Expression<T> getSelection()
Set<Join<?, ?>> getCorrelatedJoins()
クラス名 org.eclipse.persistence.transaction.AbstractTransactionController
メソッド名
void beginTransaction(AbstractSession session)
void commitTransaction(AbstractSession session)
void rollbackTransaction(AbstractSession session)
void markTransactionForRollback()
クラス名 org.eclipse.persistence.descriptors.DescriptorEventManager
メソッド名
public void executeEvent(DescriptorEvent event)
クラス名 org.eclipse.persistence.eis.EISAccessor
メソッド名
public Object basicExecuteCall(Call call, AbstractRecord translationRow, AbstractSession session)
クラス名 org.eclipse.persistence.exceptions.OptimisticLockException
メソッド名
protected OptimisticLockException(String theMessage, ObjectLevelModifyQuery query)
クラス名 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor
メソッド名
public Object basicExecuteCall(Call call, AbstractRecord translationRow, AbstractSession session)
public void closeStatement(Statement statement, AbstractSession session, DatabaseCall call)
public Integer executeDirectNoSelect(Statement statement, DatabaseCall call, AbstractSession session)
public ResultSet executeSelect(DatabaseCall call, Statement statement, AbstractSession session)
public Object processResultSet(ResultSet resultSet, DatabaseCall call, Statement statement, AbstractSession session)
protected Vector buildThreadCursoredResult(final DatabaseCall dbCall, final ResultSet resultSet, final Statement statement, final ResultSetMetaData metaData, final AbstractSession session)
クラス名 org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
メソッド名
public boolean wasFailureCommunicationBased(SQLException exception, Connection connection, AbstractSession sessionForProfile)
クラス名 org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor
メソッド名
public void connect(Login login, AbstractSession session)
public void disconnect(AbstractSession session)
public void beginTransaction(AbstractSession session)
public void commitTransaction(AbstractSession session)
protected void reconnect(AbstractSession session)
public void rollbackTransaction(AbstractSession session)
クラス名 org.eclipse.persistence.internal.databaseaccess.DynamicSQLBatchWritingMechanism
メソッド名
protected PreparedStatement prepareBatchStatement(AbstractSession session)
protected Statement prepareJDK12BatchStatement(AbstractSession session)
クラス名 org.eclipse.persistence.internal.databaseaccess.ParameterizedSQLBatchWritingMechanism
メソッド名
protected PreparedStatement prepareBatchStatements(AbstractSession session)
クラス名 org.eclipse.persistence.internal.descriptors.ObjectBuilder
メソッド名
public Object buildObject(ObjectBuildingQuery query, AbstractRecord databaseRow, JoinedAttributeManager joinManager)
クラス名 org.eclipse.persistence.internal.identitymaps.IdentityMapManager
メソッド名
public CacheKey acquireDeferredLock(Object primaryKey, Class domainClass, ClassDescriptor descriptor)
public CacheKey acquireLock(Object primaryKey, Class domainClass, boolean forMerge, ClassDescriptor descriptor)
public CacheKey acquireLockNoWait(Object primaryKey, Class domainClass, boolean forMerge, ClassDescriptor descriptor)
public CacheKey acquireLockWithWait(Object primaryKey, Class domainClass, boolean forMerge, ClassDescriptor descriptor, int wait)
public void acquireReadLock()
public CacheKey acquireReadLockOnCacheKey(Object primaryKey, Class domainClass, ClassDescriptor descriptor)
public CacheKey acquireReadLockOnCacheKeyNoWait(Object primaryKey, Class domainClass, ClassDescriptor descriptor)
public boolean containsKey(Object key, Class theClass, ClassDescriptor descriptor)
public Vector getAllFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, int valueHolderPolicy, boolean shouldReturnInvalidatedObjects)
public void invalidateObjects(Expression selectionCriteria, Class theClass, Record translationRow, boolean shouldInvalidateOnException)
public CacheKey getCacheKeyForObjectForLock(Object primaryKey, Class theClass, ClassDescriptor descriptor)
public CacheKey getCacheKeyForObject(Object primaryKey, Class theClass, ClassDescriptor descriptor, boolean forMerge)
public Object getFromIdentityMap(Object key, Class theClass, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor)
public Object getFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, int valueHolderPolicy, boolean conforming, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor)
public Object getFromIdentityMapWithDeferredLock(Object key, Class theClass, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor)
public Object getWrapper(Object primaryKey, Class theClass)
public Object getWriteLockValue(Object primaryKey, Class domainClass, ClassDescriptor descriptor)
public CacheKey putInIdentityMap(Object domainObject, Object keys, Object writeLockValue, long readTime, ClassDescriptor descriptor)
public Object removeFromIdentityMap(Object key, Class domainClass, ClassDescriptor descriptor, Object objectToRemove)
public void setWrapper(Object primaryKey, Class theClass, Object wrapper)
public void setWriteLockValue(Object primaryKey, Class theClass, Object writeLockValue)
クラス名 org.eclipse.persistence.internal.oxm.XMLObjectBuilder
メソッド名
public Object buildObject(ObjectBuildingQuery query, AbstractRecord databaseRow, JoinedAttributeManager joinManager)
クラス名 org.eclipse.persistence.internal.queries.StatementQueryMechanism
メソッド名
protected void setCallFromStatement()
クラス名 org.eclipse.persistence.internal.sessions.AbstractSession
メソッド名
public void log(int level, String category, String message, Object[] params, Accessor accessor, boolean shouldTranslate)
public void log(int level, String message, Object[] params, Accessor accessor, boolean shouldTranslate)
public void logThrowable(int level, String category, Throwable throwable)
public Object executeQuery(DatabaseQuery query, AbstractRecord row, int retryCount)
クラス名 org.eclipse.persistence.internal.sessions.DatabaseSessionImpl
メソッド名
protected void preConnectDatasource()
クラス名 org.eclipse.persistence.internal.sessions.MergeManager
メソッド名
public void mergeChangesFromChangeSet(UnitOfWorkChangeSet uowChangeSet)
クラス名 org.eclipse.persistence.internal.sessions.UnitOfWorkImpl
メソッド名
public void rollbackTransaction()
public Object assignSequenceNumber(Object object, ClassDescriptor descriptor)
protected void assignSequenceNumbers(Map objects)
protected void commitToDatabaseWithChangeSet(boolean commitTransaction)
protected void mergeChangesIntoParent()
public Object mergeClone(Object rmiClone, int cascadeDepth)
public Object registerExistingObject(Object objectToRegister, ClassDescriptor descriptor, Object queryPrimaryKey)
public synchronized Object registerNewContainerBean(Object newObject)
public synchronized Object registerNewContainerBeanForCMP(Object newObject)
protected Object registerNewObject(Object implementation, ClassDescriptor descriptor)
public void registerNewObjectForPersist(Object newObject, Map visitedObjects)
protected Object registerObject(Object object, ClassDescriptor descriptor)
クラス名 org.eclipse.persistence.internal.sessions.coordination.ProfileDiscoveryStartedCommand
メソッド名
public void executeWithSession(AbstractSession session)
クラス名 org.eclipse.persistence.internal.sessions.coordination.ProfileDiscoveryStoppedCommand
メソッド名
public void executeWithSession(AbstractSession session)
クラス名 org.eclipse.persistence.internal.sessions.coordination.ProfileMessageReceiveCommand
メソッド名
public void executeWithSession(AbstractSession session)
クラス名 org.eclipse.persistence.internal.sessions.coordination.ProfileMessageSentCommand
メソッド名
public void executeWithSession(AbstractSession session)
クラス名 org.eclipse.persistence.internal.sessions.coordination.ProfileRemoteChangeSetCommand
メソッド名
public void executeWithSession(AbstractSession session)
クラス名 org.eclipse.persistence.platform.database.SQLServerPlatform
メソッド名
public Object executeStoredProcedure(DatabaseCall dbCall, PreparedStatement statement, DatabaseAccessor accessor, AbstractSession session)
クラス名 org.eclipse.persistence.platform.database.SybasePlatform
メソッド名
public Object executeStoredProcedure(DatabaseCall dbCall, PreparedStatement statement, DatabaseAccessor accessor, AbstractSession session)
クラス名 org.eclipse.persistence.queries.DatabaseQuery
メソッド名
public void checkPrepare(AbstractSession session, AbstractRecord translationRow, boolean force)
クラス名 org.eclipse.persistence.queries.ReadAllQuery
メソッド名
public Object execute(AbstractSession session, AbstractRecord row)
クラス名 org.eclipse.persistence.queries.ReadObjectQuery
メソッド名
protected Object checkEarlyReturnLocal(AbstractSession session, AbstractRecord translationRow)
クラス名 org.eclipse.persistence.sessions.SessionEventManager
メソッド名
public void missingDescriptor(Class missingClass)
public void moreRowsDetected(DatabaseCall call)
public void noRowsModified(ModifyQuery query, Object object)
public void outputParametersDetected(Record outputRow, DatasourceCall call)
public void postAcquireClientSession()
public void postAcquireConnection(Accessor accessor)
public void postAcquireUnitOfWork()
public void postBeginTransaction()
public void postCommitTransaction()
public void postCommitUnitOfWork()
public void postConnect(Accessor accessor)
public void postExecuteQuery(DatabaseQuery query, Object result)
public void postReleaseClientSession()
public void postReleaseUnitOfWork()
public void postResumeUnitOfWork()
public void postRollbackTransaction()
public void postDistributedMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet)
public void postMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet)
public void preBeginTransaction()
public void preCalculateUnitOfWorkChangeSet()
public void postCalculateUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet)
public void preCommitTransaction(
public void preCommitUnitOfWork()
public void preExecuteQuery(DatabaseQuery query
public void preLogin(Session session)
public void postLogin(Session session)
public void prepareUnitOfWork()
public void preReleaseClientSession()
public void preReleaseConnection(Accessor accessor)
public void preReleaseUnitOfWork()
public void preRollbackTransaction()
public void preDistributedMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet)
public void preMergeUnitOfWorkChangeSet(UnitOfWorkChangeSet changeSet)
クラス名 org.eclipse.persistence.sessions.server.ClientSession
メソッド名
public ClientSession(ServerSession parent, ConnectionPolicy connectionPolicy, Map properties)
クラス名 org.eclipse.persistence.sessions.server.ConnectionPool
メソッド名
public synchronized Accessor acquireConnection(
public synchronized void releaseConnection(Accessor connection)
クラス名 org.eclipse.persistence.transaction.AbstractSynchronizationListener
メソッド名
public void afterCompletion(Object status)
public void beforeCompletion()


7.11.5.2. 性能情報の採取方法

性能情報の採取を開始する場合、性能情報採取開始コマンドの実行、もしくは 統合運用管理ツールにより設定してください。

otxadminコマンドによる実行
実行例)
otxadmin> start-jpa-performanceinfomation --user admin --password adminadmin 


7.11.5.3. 性能情報の出力先

性能情報のデータファイルは以下のディレクトリに格納されます。
データの各項目は、":"(コロン)区切りで出力されます。

表3.7.12.5-39 性能情報の出力先
性能情報の出力先フォルダファイル名
${AS_DOMAIN}/logs/jpa/Profile/Work/YYYYMMDDHHmmss_PID_profile.dat


7.11.5.4. 性能情報採取データの出力項目

出力項目は以下の通りです。

表3.7.12.5-40 性能情報採取データ 出力項目
名前説明
タイムスタンプ(ミリ秒)性能情報登録時のシステムミリ秒
タイムスタンプ(ナノ秒)性能情報登録時のシステムナノ秒
スレッド名性能情報登録を行ったスレッド名
スレッドID性能情報登録を行ったスレッドID
メッセージ性能情報メッセージ。
以下の性能情報、もしくは、例外情報が格納されます。

表3.7.12.5-41 メッセージ(性能情報)出力項目
名前説明
NOシーケンスNo(1〜Long.MAX_VALUE)
レコードタイプ「P」 固定(Profile)
I/Oメソッド開始時:I
メソッド終了時:O
API名"クラス名#メソッド名" の形式で出力
エンティティ名エンティティ名(完全修飾名)
エンティティIDエンティティID
クエリクエリ名 or JPQL or SQL
表3.7.12.5-42 メッセージ(例外情報)出力項目
名前説明
NOシーケンスNo(1〜Long.MAX_VALUE)
レコードタイプ「E」 固定(Exception)
API名"クラス名#メソッド名" の形式で出力
エンティティ名エンティティ名(完全修飾名)
エンティティIDエンティティID

7.11.5.5. JPAランキング情報

JPAランキング情報生成コマンド(create-jpa-ranking)を使用することにより、 出力した性能情報のファイルからJPAのランキング情報の作成を行うことができます。
また、生成したJPAランキング情報は、データプリロードの読み込み順序として利用することができます。
コマンドについての詳細は [ リファレンス > コマンドリファレンス > インメモリデータグリッド連携部品コマンド ] を参照してください。