昨天有人在群裡問, mysql是否可以設定讀寫超時(非連線超時), 如果可以就可以避免一條sql執行過慢, 導致php超時錯誤. 這個, 其實可以有. 只不過稍微要麻煩點.
首先, 在libmysql中, 是提供了mysql_opt_read_timeout設定項的, 並且libmysql中提供了設定相關設定項的api, mysql_options:
int stdcall
mysql_options(mysql mysql,enum mysql_option option, const void *arg)
dbug_enter(「mysql_option」);
dbug_print(「enter」,(「option: %d」,(int) option));
switch (option) 但是因為mysqli並沒有匯出這個常量, 所以我們需要通過檢視mysql的**, 得到mysql_opt_read_timeout的實際值, 然後直接呼叫mysql_options:
enum mysql_option
mysql_opt_connect_timeout, mysql_opt_compress, mysql_opt_named_pipe,
mysql_init_command, mysql_read_default_file, mysql_read_default_group,
mysql_set_charset_dir, mysql_set_charset_name, mysql_opt_local_infile,
mysql_opt_protocol, mysql_shared_memory_base_name, mysql_opt_read_timeout,
mysql_opt_write_timeout, mysql_opt_use_result,
mysql_opt_use_remote_connection, mysql_opt_use_embedded_connection,
mysql_opt_guess_connection, mysql_set_client_ip, mysql_secure_auth,
mysql_report_data_truncation, mysql_opt_reconnect,
mysql_opt_ssl_verify_server_cert
可以看到, mysql_opt_read_timeout為11.
現在, 我們就可以設定查詢超時了:
$mysqli = mysqli_init();
$mysqli->options(11 /mysql_opt_read_timeout/, 1);
$mysql->real_connect(***);
不過, 因為在libmysql中有重試機制(嘗試一次, 重試倆次), 所以, 最終我們設定的超時閾值都會三倍於我們設定的值.
也就是說, 如果我們設定了mysql_opt_read_timeout為1, 最終會在3s以後超時結束. 也就是說, 我們目前能設定的最短超時時, 就是3秒…
雖說大了點,, 不過總比沒有好, 呵呵
檢視mysql設定超時 mysql設定查詢超時方法
文章來介紹了自定義mysql查詢超時的時間長度,下面我們來看看詳細的設定方法。首先,在libmysql中,是提供了mysql opt read timeout設定項的,並且libmysql中提供了設定相關設定項的api,如下 mysql options int stdcall mysql optio...
mysql配置慢查詢 MYSQL慢查詢配置
mysql慢查詢配置 1.慢查詢有什麼用?它能記錄下所有執行超過long query time時間的sql語句,幫你找到執行慢的sql,方便我們對這些sql進行優化.2.如何開啟慢查詢?首先我們先檢視mysql伺服器的慢查詢狀態是否開啟.執行如下命令 我們可以看到當前log slow queries...
原創 PHP訪問MySQL查詢超時處理
分類 linux freebsd server mysql phpquery 擴充套件資料庫 優化php連線mysql主要是使用mysql提供的 libmysqlclient 的客戶端庫,同時也延伸出來 mysql 和 mysqli 兩套php的擴充套件,相對來說 mysqli 比 mysql 更好...