2017-12-21 8 views
0

mysqlサーバでinnoDbが有効になっているかどうかを確認するために次のコードを使用していますが、mysqlによるディスク書き込みの総数を取得します。あなたがI/O数を含め、SHOW ENGINE INNODB STATUSと共にInnoDB情報の多くを得ることができ、次のプログラムinnoDbが有効な場合、mysqlディスク書き込みを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のファイルが書き込みされている上記を参照してください。私のラップトップで実行されているサンドボックスのMySQLインスタンスからこの情報が得られたため、上記の数値は小さいです。

上記のJimGarrisonによってコメントされたように、INNODB STATUSによって報告された情報のほとんどは、INFORMATION_SCHEMA.INNODB_METRICSテーブルの個々の行として利用できます。これは、SHOW ENGINE INNODB STATUSよりもJavaで使いやすく、テキストを解析しようとする方が簡単です。

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" 
+---------------+--------+ 

注:「要求」には、ディスクにヒットする必要がある書き込みと含まない書き込みの両方が含まれます。

関連する問題