2017-12-21 14 views
0

mysql 서버에서 innoDb가 활성화되어 있는지 확인하려면 다음 코드를 사용하지만 mysql에서 총 디스크 쓰기 수를 얻고 싶습니다. 당신은 I/O 카운트를 포함, SHOW ENGINE INNODB STATUS와 이노 많은 정보를 얻을 수있는 다음 프로그램innoDb가 활성화 된 경우 java에서 디스크 쓰기를 수행하는 방법

public class connectToInnoDb { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    try{ 
     Class.forName("com.mysql.cj.jdbc.Driver"); 
     Connection con=DriverManager.getConnection( 
     "jdbc:mysql://localhost:3310/INFORMATION_SCHEMA","root","root"); 
     Statement stmt=con.createStatement(); 
     ResultSet rs=stmt.executeQuery("SELECT * FROM ENGINES"); 
     while(rs.next()) { 
      if(rs.getString(1) == "Innodb") 
       System.out.println("Yes"); 

     } 
     con.close(); 
     }catch(Exception e){ System.out.println(e);} 
} 
+0

코드에 어떤 문제가 있습니까? 참고 :'rs.getString (1) .equals ("Innodb")'와 같은 문자열을 대신 비교하십시오. –

+0

위의 코드에 문제가 없습니다. Innodb를 사용하여 MySQL이 디스크 쓰기 총 수를 얻는 기능을 추가하고 싶습니다. –

+0

그래서 Innodb을 사용하여 테이블 디스크의 크기를 얻고 싶습니까? –

답변

0

로 도와주세요 :

mysql> SHOW ENGINE INNODB STATUS\G 

... 
-------- 
FILE I/O 
-------- 
I/O thread 0 state: waiting for i/o request (insert buffer thread) 
I/O thread 1 state: waiting for i/o request (log thread) 
I/O thread 2 state: waiting for i/o request (read thread) 
I/O thread 3 state: waiting for i/o request (read thread) 
I/O thread 4 state: waiting for i/o request (read thread) 
I/O thread 5 state: waiting for i/o request (read thread) 
I/O thread 6 state: waiting for i/o request (write thread) 
I/O thread 7 state: waiting for i/o request (write thread) 
I/O thread 8 state: waiting for i/o request (write thread) 
I/O thread 9 state: waiting for i/o request (write thread) 
Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] , 
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0 
Pending flushes (fsync) log: 0; buffer pool: 0 
431 OS file reads, 69 OS file writes, 53 OS fsyncs 
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s 
... 

내가 위에서이 있었다 69 OS 파일이 기록을 참조하십시오. 내 노트북에서 실행되는 sandbox MySQL 인스턴스에서이 정보를 얻었으므로 위의 수치는 작습니다. 그리고 오래 실행되지 않았습니다.

위의 JimGarrison에 의해 설명 되었 듯이, INNODB STATUS에 의해보고 된 대부분의 정보는 INFORMATION_SCHEMA.INNODB_METRICS 테이블의 개별 행으로 사용할 수도 있습니다. SHOW ENGINE INNODB STATUS보다 자바에서 사용하는 것이 훨씬 쉽고 텍스트를 파싱하려고합니다.

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS 
     WHERE NAME = 'os_data_writes'\G 

      NAME: os_data_writes 
     SUBSYSTEM: os 
      COUNT: 69 
     MAX_COUNT: 69 
     MIN_COUNT: NULL 
     AVG_COUNT: 0.0034979215248910067 
    COUNT_RESET: 69 
MAX_COUNT_RESET: 69 
MIN_COUNT_RESET: NULL 
AVG_COUNT_RESET: NULL 
    TIME_ENABLED: 2017-12-22 10:27:50 
    TIME_DISABLED: NULL 
    TIME_ELAPSED: 19726 
    TIME_RESET: NULL 
     STATUS: enabled 
      TYPE: status_counter 
     COMMENT: Number of writes initiated (innodb_data_writes) 

읽기는 https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-metrics-table.html

내가 Java 코드를 표시하지 않습니다, 당신은 이미 쿼리를 실행하고 결과를 가져 오는 방법을 알고있다. 이 문은 SELECT 쿼리를 실행하는 것과 같은 방법으로 SQL 문으로 실행할 수 있습니다.

0
mysql> SHOW GLOBAL STATUS LIKE 'Innodb%write%'; 
+-----------------------------------+-------+ 
| Variable_name      | Value | 
+-----------------------------------+-------+ 
| Innodb_buffer_pool_write_requests | 5379 | 
| Innodb_data_pending_writes  | 0  | 
| Innodb_data_writes    | 416 | 
| Innodb_dblwr_writes    | 30 | 
| Innodb_log_write_requests   | 1100 | 
| Innodb_log_writes     | 88 | 
| Innodb_os_log_pending_writes  | 0  | 
| Innodb_truncated_status_writes | 0  | 
+-----------------------------------+-------+ 

mysql> SHOW GLOBAL STATUS LIKE 'Uptime'; 
+---------------+--------+ 
| Variable_name | Value | 
+---------------+--------+ 
| Uptime  | 4807 | -- divide by this to get "per second" 
+---------------+--------+ 

참고 : "요청"에는 디스크에 기록 할 필요가있는 기록과 기록하지 않는 기록이 모두 포함됩니다.