Как получить MySQL диск записи в Java, если включен InnoDb

0

Я использую следующий код, чтобы проверить, включен ли innoDb на сервере mysql, но я хочу получить общее количество записей на диске mysql. пожалуйста, помогите с следующей программой

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);}  
}
Теги:
innodb

2 ответа

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

Примечание: "запросы" включают в себя как записи, требующие попадания на диск, так и те, которые этого не делают.

0

Вы можете получить много информации InnoDB с помощью SHOW ENGINE INNODB STATUS, включая количество входов/выходов:

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 файлов ОС. Вышеуказанные числа малы, потому что я получил эту информацию из экземпляра MySQL sandbox, запущенного на моем ноутбуке, и он не работал долго.

Как уже отмечал JimGarrison, большая часть информации, сообщенной INNODB STATUS, также доступна вам как отдельные строки в таблице INFORMATION_SCHEMA.INNODB_METRICS. Это намного проще использовать в Java, чем 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, вы уже знаете, как запустить запрос и получить результаты. Эти операторы могут выполняться как операторы SQL так же, как вы запускаете запросы SELECT.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню