PHP Conference Japan 2024

執行階段組態

這些函數的行為會受到 php.ini 中的設定影響。

MySQL Native Driver 組態選項
名稱 預設 可變更 更新日誌
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 中移除
如需 INI_* 模式的詳細資料和定義,請參閱設定檔可以設定的地方

以下是組態指令的簡短說明。

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 int

mysqlnd 記憶體集區的預設大小,供結果集使用。

mysqlnd.net_read_timeout int

mysqlnd 和 MySQL 用戶端程式庫 libmysqlclient 使用不同的網路 API。mysqlnd 使用 PHP 串流,而 libmysqlclient 使用其在作業層級網路呼叫之上的封裝器。PHP 預設為串流設定 60 秒的讀取逾時。這是透過 php.inidefault_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/mysqlext/mysqliPDO_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 用戶端伺服器協定將其所有命令封裝在封包中。封包包含一個小型標頭和一個包含實際有效負載的主體。主體的大小編碼在標頭中。mysqlndMIN(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 起已移除

新增註解

使用者貢獻的註解

此頁面尚無使用者貢獻的註解。
To Top