簡體   English   中英

MariaDB系統變量引用哪些數據,例如innodb_log_buffer_size

[英]What data do the MariaDB system variables refer to e.g. innodb_log_buffer_size

許多MariaDB系統變量定義了最大數據大小,在通過JDBC發送大量數據的寫操作的上下文中,我不清楚確切地測量了哪些數據,例如:

innodb_buffer_pool_size = 24696061952

innodb_log_buffer_size = 8388608

max_allowed_packet = 562036736

我使用基准測試,在其中插入,更新或刪除具有2MB原始數據(即日期和雙精度數據)的50000行。

因此,當MariaDB實現這些變量定義的限制時,它是查看通過網絡發送的參數的原始值,還是也包含所有SQL字符串?

即它只是測量

2012-01-01,0.1234
2012-01-02,0.4321
2012-01-03,0.9999
...

還是考慮SQL字符串中的字節:

UPDATE data SET value = 0.1234 WHERE date = '2012-01-01'
UPDATE data SET value = 0.4321 WHERE date = '2012-01-02'
UPDATE data SET value = 0.9999 WHERE date = '2012-01-03'

在此示例中,哪個明顯大2到3倍?

Innodb_log_buffer_size

它指的是內部的東西。 事務記錄到重做日志(ib_logfile0 / ib_logfile1)中。 重做日志記錄將緩沖在重做日志緩沖區中,直到提交事務為止。重做日志記錄的格式未記錄,並且在兩個版本之間可能有所更改。 您可以通過觀察innodb_os_log_writer狀態變量的更改來查看寫入日志的數量。

 MariaDB [test]> show global status like 'innodb_os_log_written';
 +-----------------------+-------+
 | Variable_name         | Value |
 +-----------------------+-------+
 | Innodb_os_log_written | 12800 |
 +-----------------------+-------+
 1 row in set (0.00 sec)

innodb_buffer_pool_size

您的數據很小,緩沖池足夠大。 緩沖池是innodb緩存數據的方式。 如果您的數據大於bufferpool(在您的情況下不是),則Innodb將需要更頻繁地從磁盤讀取數據。 因此,請保持原樣,或者可以使其更小。

max_allowed_pa​​cket的

這只是一種安全措施,旨在防止DDOS。 如果發送非常大的數據包,它們會使服務器分配更多的內存,甚至可能用完內存。 但是,如果不發送大數據包,則服務器不會分配大量內存,並且如果您不怕DDOS,則可以將其擴展到1G。

為了了解在服務器端發送或接收了多少數據,您可以查看狀態變量

MariaDB [test]> show status like 'bytes%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| Bytes_received | 570   |
| Bytes_sent     | 1716  |
+----------------+-------+
2 rows in set (0.00 sec)

這與您發送的數據大小如何對應? 並非總是有一個簡單的答案。

  • 沒有(服務器端)准備的語句

    如果您只是發送未准備好的查詢,則將發送4字節的數據包頭+ 1字節的命令(COM_QUERY)+ SQL查詢字符串。 如果查詢大於16M,它將被分為多個數據包,每個數據包有4個字節的開銷。

  • 服務器端准備好的語句。

    使用服務器端准備好的語句會更加復雜。 每個數據類型都有其自己的編碼。 ,因此整數不會以文本,浮點數或日期的形式發送。 字符串仍然作為字符串發送。 通常,發送的數據量會小一些(畢竟,您僅發送數據就不發送SQL命令)。

  • 批次特定的優化

    MariaDB 10.2服務器和JDBC還進行了優化,可以為單個准備好的語句發送多個數據。 這樣可以減少客戶端發送的數據量(一點),但是客戶端接收的數據量將大大減少,所有命令只是單個數據包,而不是每個命令一個。 此優化不適用於DELETE。

對於批處理未在服務器端准備好的語句,JDBC進行了另一項優化,該優化將許多類似的INSERT查詢轉換為一個多插入,這也減少了發送和接收的字節數,但這僅是INSERT(現在是一項對DELETE執行類似操作的任務)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM