這些函數的行為會受到 php.ini 中的設定影響。
名稱 | 預設 | 可變更 | 更新日誌 |
---|---|---|---|
mysqlnd.collect_statistics | "1" | INI_SYSTEM |
|
mysqlnd.collect_memory_statistics | "0" | INI_SYSTEM |
|
mysqlnd.debug | "" | INI_SYSTEM |
|
mysqlnd.log_mask | 0 | INI_ALL |
|
mysqlnd.mempool_default_size | 16000 | INI_ALL |
|
mysqlnd.net_read_timeout | "86400" | INI_ALL |
在 PHP 7.2.0 之前,預設值為 "31536000",且可變更性為 INI_SYSTEM |
mysqlnd.net_cmd_buffer_size | "4096" | INI_SYSTEM |
|
mysqlnd.net_read_buffer_size | "32768" | INI_SYSTEM |
|
mysqlnd.sha256_server_public_key | "" | INI_PERDIR |
|
mysqlnd.trace_alloc | "" | INI_SYSTEM |
|
mysqlnd.fetch_data_copy | 0 | INI_ALL |
已在 PHP 8.1.0 中移除 |
以下是組態指令的簡短說明。
mysqlnd.collect_statistics
bool啟用收集各種用戶端統計資訊,這些資訊可以透過 mysqli_get_client_stats()、mysqli_get_connection_stats() 存取,並且也會顯示在 phpinfo() 函數輸出的 mysqlnd
區段中。
這個組態設定會啟用所有MySQL Native Driver 統計資訊,除了與記憶體管理相關的資訊以外。
mysqlnd.collect_memory_statistics
bool啟用收集各種記憶體統計資訊,這些資訊可以透過 mysqli_get_client_stats()、mysqli_get_connection_stats() 存取,並且也會顯示在 phpinfo() 函數輸出的 mysqlnd
區段中。
這個組態設定會啟用MySQL Native Driver 統計資訊整體集合中的記憶體管理統計資訊。
mysqlnd.debug
string將使用 mysqlnd
的所有擴充功能的通訊記錄到指定的記錄檔。
指令的格式為 mysqlnd.debug = "option1[,parameter_option1][:option2[,parameter_option2]]"
。
格式字串的選項如下
A[,file] - 將追蹤輸出附加到指定的檔案。同時確保在每次寫入後寫入資料。這是透過關閉並重新開啟追蹤檔案來完成(這很慢)。這有助於確保在應用程式當機時有完整的記錄檔。
a[,file] - 將追蹤輸出附加到指定的檔案。
d - 啟用目前狀態的 DBUG_<N> 巨集輸出。後面可以跟隨關鍵字清單,只選取具有該關鍵字的 DBUG 巨集輸出。空的關鍵字清單表示所有巨集的輸出。
f[,functions] - 將偵錯器動作限制為指定的函數清單。空的函數清單表示選取所有函數。
F - 使用導致輸出的巨集所在的原始檔名稱標記每個偵錯器輸出列。
i - 使用目前程序的 PID 標記每個偵錯器輸出列。
L - 使用導致輸出的巨集所在的原始檔行號標記每個偵錯器輸出列。
n - 使用目前的函數巢狀深度標記每個偵錯器輸出列
o[,file] - 類似於 a[,file],但會覆寫舊檔案,並且不會附加。
O[,file] - 類似於 A[,file],但會覆寫舊檔案,並且不會附加。
t[,N] - 啟用函數控制流程追蹤。最大巢狀深度由 N 指定,預設值為 200。
x - 此選項會啟動效能分析。
m - 追蹤記憶體配置和解除配置相關的呼叫。
範例
d:t:x:O,/tmp/mysqlnd.trace
注意:
此功能僅適用於 PHP 的偵錯建置版本。
mysqlnd.log_mask
int定義要記錄哪些查詢。預設值為 0,這會停用記錄。使用整數定義,而不是使用 PHP 常數。例如,值 48 (16 + 32) 會記錄使用「沒有好的索引」(SERVER_QUERY_NO_GOOD_INDEX_USED = 16) 或完全沒有索引 (SERVER_QUERY_NO_INDEX_USED = 32) 的慢速查詢。值 2043 (1 + 2 + 8 + ... + 1024) 會記錄所有慢速查詢類型。
類型如下:SERVER_STATUS_IN_TRANS=1、SERVER_STATUS_AUTOCOMMIT=2、SERVER_MORE_RESULTS_EXISTS=8、SERVER_QUERY_NO_GOOD_INDEX_USED=16、SERVER_QUERY_NO_INDEX_USED=32、SERVER_STATUS_CURSOR_EXISTS=64、SERVER_STATUS_LAST_ROW_SENT=128、SERVER_STATUS_DB_DROPPED=256、SERVER_STATUS_NO_BACKSLASH_ESCAPES=512 和 SERVER_QUERY_WAS_SLOW=1024。
mysqlnd.mempool_default_size
intmysqlnd 記憶體集區的預設大小,供結果集使用。
mysqlnd.net_read_timeout
int
mysqlnd
和 MySQL 用戶端程式庫 libmysqlclient
使用不同的網路 API。mysqlnd
使用 PHP 串流,而 libmysqlclient
使用其在作業層級網路呼叫之上的封裝器。PHP 預設為串流設定 60 秒的讀取逾時。這是透過 php.ini 的 default_socket_timeout
設定。此預設值適用於所有未設定其他逾時值的串流。mysqlnd
不會設定任何其他值,因此,長時間執行的查詢的連線可能會在 default_socket_timeout
秒後斷線,導致出現錯誤訊息 2006 - MySQL 伺服器已消失
。MySQL 用戶端程式庫會設定 24 * 3600 秒(1 天)的預設逾時,並等待其他逾時發生,例如 TCP/IP 逾時。mysqlnd
現在使用相同的超長逾時。該值可以透過新的 php.ini 設定 mysqlnd.net_read_timeout
進行設定。mysqlnd.net_read_timeout
會由任何使用 mysqlnd
的擴充功能(ext/mysql
、ext/mysqli
、PDO_MySQL
)使用。mysqlnd
會告訴 PHP 串流使用 mysqlnd.net_read_timeout
。請注意,MySQL 用戶端程式庫的 MYSQL_OPT_READ_TIMEOUT
與 PHP 串流之間可能存在細微差異,例如 MYSQL_OPT_READ_TIMEOUT
的文件說明僅適用於 TCP/IP 連線,且在 MySQL 5.1.2 之前,僅適用於 Windows。PHP 串流可能沒有這個限制。如有疑問,請查看串流文件。
mysqlnd.net_cmd_buffer_size
int
mysqlnd
為每個連線配置 mysqlnd.net_cmd_buffer_size
(在 php.ini 中)位元組的內部命令/網路緩衝區。如果 MySQL 用戶端伺服器協定命令(例如 COM_QUERY
(「正常」查詢))不符合緩衝區,mysqlnd
將會擴充緩衝區,使其達到傳送命令所需的大小。每當緩衝區針對一個連線擴充時,command_buffer_too_small
將會遞增 1。
如果 mysqlnd
必須將緩衝區擴充至其初始大小 mysqlnd.net_cmd_buffer_size
位元組以上,以用於幾乎每個連線,則應考慮增加預設大小,以避免重新配置。
預設緩衝區大小為 4096 位元組,這是可能最小的值。
也可以使用 mysqli_options(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size)
設定值。
mysqlnd.net_read_buffer_size
int讀取 MySQL 命令封包主體時的最大讀取區塊大小(以位元組為單位)。MySQL 用戶端伺服器協定將其所有命令封裝在封包中。封包包含一個小型標頭和一個包含實際有效負載的主體。主體的大小編碼在標頭中。mysqlnd
以 MIN(header.size, mysqlnd.net_read_buffer_size)
位元組的區塊讀取主體。如果封包主體大於 mysqlnd.net_read_buffer_size
位元組,mysqlnd
必須多次呼叫 read()
。
也可以使用 mysqli_options(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size)
設定值。
mysqlnd.sha256_server_public_key
字串與 SHA-256 身份驗證外掛相關。包含 MySQL 伺服器公開 RSA 金鑰的檔案。
客戶端可以選擇省略設定公開 RSA 金鑰,透過此 PHP 設定指定金鑰,或在執行時使用 mysqli_options() 設定金鑰。如果客戶端未提供公開 RSA 金鑰檔案,則金鑰將作為標準 SHA-256 身份驗證外掛驗證程序的一部分進行交換。
mysqlnd.trace_alloc
字串
mysqlnd.fetch_data_copy
整數強制將結果集從內部結果集緩衝區複製到 PHP 變數中,而不是使用預設的參考和寫入時複製邏輯。詳細資訊請參閱記憶體管理實作注意事項。
複製結果集而非讓 PHP 變數參考它們,可以更早釋放 PHP 變數佔用的記憶體。根據使用者 API 程式碼、實際的資料庫查詢及其結果集的大小,這可能會減少 mysqlnd 的記憶體佔用。
如果使用 PDO_MySQL,請勿設定。PDO_MySQL 尚未更新以支援新的提取模式。
注意:自 PHP 8.1.0 起已移除