iBATIS (বর্তমানে MyBatis) একটি SQL Mapping Framework যা Java objects এবং SQL queries এর মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। SQL query logging এবং performance monitoring MyBatis-এ ডেটাবেসের কার্যকারিতা এবং পারফরম্যান্স নিরীক্ষণ করার জন্য গুরুত্বপূর্ণ বৈশিষ্ট্য।
এই গাইডে আমরা SQL Query Logging এবং Performance Monitoring কিভাবে MyBatis-এ ব্যবহার করতে হয় তা বিস্তারিতভাবে দেখব।
1. SQL Query Logging in MyBatis
SQL query logging MyBatis-এ ডেটাবেসের সাথে যেকোনো SQL query এর ইন্টারঅ্যাকশন লগ করার একটি উপায়। এর মাধ্যমে আপনি যেসব query চালাচ্ছেন তা দেখতে পারবেন এবং প্রয়োজনে debugging করতে পারবেন।
Enabling SQL Query Logging in MyBatis
MyBatis-এ SQL query logging সাধারণত log4j বা slf4j এর মতো logging frameworks ব্যবহার করে পরিচালিত হয়। আপনি log4j কনফিগারেশন ফাইল ব্যবহার করে MyBatis SQL query গুলি লগ করতে পারেন।
Step 1: Enable Logging in MyBatis (log4j example)
MyBatis configuration file (mybatis-config.xml) এ logging সক্রিয় করার জন্য নিচের কনফিগারেশনটি ব্যবহার করুন।
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<mappers>
<mapper resource="com/example/EmployeeMapper.xml"/>
</mappers>
</configuration>
Step 2: log4j Configuration
এখানে log4j ব্যবহারের উদাহরণ দেয়া হলো, যেটি SQL queries এবং MyBatis interactions লগ করতে ব্যবহৃত হবে।
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p %c{1}:%L - %m%n
# Log MyBatis SQL Queries
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.com.ibatis.sqlmap=DEBUG
Explanation:
logImpl="LOG4J": এটি MyBatis-এ log4j ব্যবহার করতে নির্দেশ দেয়।log4j.logger.org.mybatis=DEBUG: এটি MyBatis SQL query গুলিDEBUGস্তরে লগ করবে।log4j.logger.java.sql=DEBUG: JDBC এবং SQL এর জন্য লগ স্তর DEBUG সেট করা হয়েছে।
Logging Example:
যখন আপনি একটি query চালাবেন, তখন console এ এই ধরনের লগ দেখতে পাবেন:
Preparing: SELECT * FROM employee WHERE id=?
Parameters: 1
এটি আপনাকে দেখাবে কোন SQL query চালানো হয়েছে এবং সেই query তে কোন parameters পাঠানো হয়েছে।
2. Performance Monitoring in MyBatis
MyBatis-এ performance monitoring করা খুবই গুরুত্বপূর্ণ যাতে ডেটাবেসের কার্যকারিতা পর্যবেক্ষণ করা যায় এবং যেকোনো পারফরম্যান্স সমস্যা চিহ্নিত করা যায়। MyBatis Performance Monitoring সাধারনত SQL query execution time, cache hit/miss rate, query count ইত্যাদি পরিমাপ করে।
Enabling MyBatis Performance Monitoring
MyBatis নিজে performance monitoring এর জন্য কোনো বিল্ট-ইন টুল সরবরাহ করে না, তবে আপনি MyBatis Statistics API ব্যবহার করে SQL query performance পর্যবেক্ষণ করতে পারেন। এর মাধ্যমে আপনি query count, cached objects, executed SQL queries এর তথ্য সংগ্রহ করতে পারবেন।
Step 1: Enable MyBatis Statistics
MyBatis-এ statistics সক্রিয় করার জন্য আপনি SqlSessionFactory এর মাধ্যমে Statistics API ব্যবহার করতে পারেন।
SqlSessionFactory sqlSessionFactory = ...;
SqlSession session = sqlSessionFactory.openSession();
Statistics stats = sqlSessionFactory.getConfiguration().getEnvironment().getDataSource().getStatistics();
session.selectList("getAllEmployees");
// Print statistics about SQL queries
System.out.println("Query Execution Count: " + stats.getQueryExecutionCount());
System.out.println("Entity Fetch Count: " + stats.getEntityFetchCount());
System.out.println("Insert Count: " + stats.getInsertCount());
System.out.println("Update Count: " + stats.getUpdateCount());
System.out.println("Delete Count: " + stats.getDeleteCount());
Explanation:
getQueryExecutionCount(): মোট কতবার SQL query চালানো হয়েছে।getEntityFetchCount(): কতবার entity ফেচ করা হয়েছে।getInsertCount(): কতবার insert অপারেশন করা হয়েছে।getUpdateCount(): কতবার update অপারেশন করা হয়েছে।getDeleteCount(): কতবার delete অপারেশন করা হয়েছে।
Output Example:
Query Execution Count: 10
Entity Fetch Count: 5
Insert Count: 3
Update Count: 2
Delete Count: 0
এই আউটপুট আপনাকে জানাবে যে, মোট কতটি query execute করা হয়েছে এবং কতগুলি insert, update, delete অপারেশন পরিচালিত হয়েছে।
Step 2: Monitor Performance with MyBatis Caching
MyBatis-এ second-level cache ব্যবহারের মাধ্যমে পারফরম্যান্স অপটিমাইজ করা যেতে পারে। আপনি cache hits এবং cache misses পরিমাপ করতে পারেন, যাতে বুঝতে পারেন আপনার ক্যাশিং কতটা কার্যকরী।
Second-level Cache Configuration Example:
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<mappers>
<mapper resource="com/example/EmployeeMapper.xml"/>
</mappers>
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
</configuration>
Step 3: Monitor Cache Hits/Misses
MyBatis এ cache hits এবং cache misses-এর সংখ্যা ট্র্যাক করতে EhCache বা অন্যান্য external cache providers ব্যবহার করতে হবে।
EhCache Configuration Example:
<ehcache>
<cache name="employeeCache"
maxEntriesLocalHeap="1000"
eternal="false"
timeToLiveSeconds="3600"
timeToIdleSeconds="600"
overflowToDisk="false"/>
</ehcache>
MyBatis Performance Monitoring with Cache Example:
System.out.println("Cache Hits: " + stats.getCacheHitCount());
System.out.println("Cache Misses: " + stats.getCacheMissCount());
Explanation:
getCacheHitCount(): কতবার ক্যাশ থেকে ডেটা ফিরিয়ে আনা হয়েছে।getCacheMissCount(): কতবার ক্যাশে ডেটা না থাকায় ডেটাবেসে গিয়ে query execute করা হয়েছে।
3. Using Profilers for Performance Monitoring
MyBatis-এ performance monitoring আরও শক্তিশালী করতে, আপনি profilers যেমন JProfiler বা YourKit ব্যবহার করতে পারেন। এই profiler tools আপনাকে memory usage, CPU usage, এবং SQL query execution time-সহ সমস্ত application-level performance metrics পর্যবেক্ষণ করতে সহায়ক।
Using JProfiler/YourKit:
- JProfiler বা YourKit-এ MyBatis-এ executed SQL queries এবং তাদের execution time ট্র্যাক করতে পারেন।
- SQL execution এর সময় এবং JDBC operations খেয়াল রেখে performance bottlenecks চিহ্নিত করতে পারবেন।
4. Summary of Performance Monitoring Tools
| Feature | MyBatis Built-in | External Tools (JProfiler/YourKit) |
|---|---|---|
| Query Execution Count | getQueryExecutionCount() | ✔️ |
| Insert/Update/Delete Count | getInsertCount(), getUpdateCount(), getDeleteCount() | ✔️ |
| Cache Hit/Miss | getCacheHitCount(), getCacheMissCount() | ✔️ |
| SQL Query Logging | logImpl="LOG4J" | ✔️ |
| Query Execution Time | getQueryExecutionTime() | ✔️ |
- SQL Query Logging এবং Performance Monitoring MyBatis-এ ডেটাবেসের কার্যকরিতা পর্যবেক্ষণ এবং অপ্টিমাইজ করতে গুরুত্বপূর্ণ টুল। আপনি log4j বা slf4j এর মাধ্যমে SQL query গুলি লগ করতে পারেন এবং Statistics API ব্যবহার করে query performance পরিমাপ করতে পারেন।
- Second-level cache ব্যবহার করার মাধ্যমে, MyBatis-এ caching এর মাধ্যমে performance optimization করা যায়, এবং cache hits এবং cache misses ট্র্যাক করতে সাহায্য করে।
- Profiling tools (যেমন JProfiler বা YourKit) ব্যবহারের মাধ্যমে আপনি SQL query execution time, memory usage, এবং CPU performance আরও উন্নতভাবে পর্যবেক্ষণ করতে পারবেন।
SQL query logging এবং performance monitoring সঠিকভাবে ব্যবহার করে MyBatis এর পারফরম্যান্স উন্নত করা যায় এবং database optimization সম্ভব হয়।
Read more