mysql设置查询超时方法

SEO研究中心 SEO研究中心提供免费SEO公开课

文章来介绍了自定义mysql查询超时的时间长度,下面我们来看看详细的设置方法,首先, 在libmysql中,是提供了MYSQL_OPT_READ_TIMEOUT设置项的,并且libmysql中提供了设置相关设置项的API,代码如下:

  1. mysql_options:
  2. intSTDCALL
  3. mysql_options(MYSQL*mysql,enummysql_optionoption,constvoid*arg)
  4. {
  5. DBUG_ENTER("mysql_option");
  6. DBUG_PRINT("enter",("option:%d",(int)option));
  7. switch(option){
  8. caseMYSQL_OPT_CONNECT_TIMEOUT:
  9. mysql->options.connect_timeout=*(uint*)arg;
  10. break;
  11. /**读超时时间*/
  12. caseMYSQL_OPT_READ_TIMEOUT:
  13. mysql->options.read_timeout=*(uint*)arg;
  14. break;
  15. caseMYSQL_OPT_WRITE_TIMEOUT:
  16. mysql->options.write_timeout=*(uint*)arg;
  17. break;
  18. caseMYSQL_OPT_COMPRESS:
  19. mysql->options.compress=1;

但是,可惜的是,目前只有mysqli扩展,把mysql_options完全暴露给了PHP,代码如下:

  1. PHP_FUNCTION(mysqli_options)
  2. {
  3. /**有省略*/
  4. switch(Z_TYPE_PP(mysql_value)){
  5. /**没有任何限制,直接传递给mysql_options*/
  6. caseIS_STRING:
  7. ret=mysql_options(mysql->mysql,mysql_option,Z_STRVAL_PP(mysql_value));
  8. break;
  9. default:
  10. convert_to_long_ex(mysql_value);
  11. l_value=Z_LVAL_PP(mysql_value);
  12. ret=mysql_options(mysql->mysql,mysql_option,(char*)&l_value);//phpfensi.com
  13. break;
  14. }
  15. RETURN_BOOL(!ret);
  16. }

但是因为Mysqli并没有导出这个常量,所以我们需要通过查看MySQL的代码,得到MYSQL_OPT_READ_TIMEOUT的实际值,然后直接调用mysql_options,代码如下:

  1. enummysql_option
  2. {
  3. MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,MYSQL_OPT_NAMED_PIPE,
  4. MYSQL_INIT_COMMAND,MYSQL_READ_DEFAULT_FILE,MYSQL_READ_DEFAULT_GROUP,
  5. MYSQL_SET_CHARSET_DIR,MYSQL_SET_CHARSET_NAME,MYSQL_OPT_LOCAL_INFILE,
  6. MYSQL_OPT_PROTOCOL,MYSQL_SHARED_MEMORY_BASE_NAME,MYSQL_OPT_READ_TIMEOUT,
  7. MYSQL_OPT_WRITE_TIMEOUT,MYSQL_OPT_USE_RESULT,
  8. MYSQL_OPT_USE_REMOTE_CONNECTION,MYSQL_OPT_USE_EMBEDDED_CONNECTION,
  9. MYSQL_OPT_GUESS_CONNECTION,MYSQL_SET_CLIENT_IP,MYSQL_SECURE_AUTH,
  10. MYSQL_REPORT_DATA_TRUNCATION,MYSQL_OPT_RECONNECT,
  11. MYSQL_OPT_SSL_VERIFY_SERVER_CERT
  12. };

可以看到,MYSQL_OPT_READ_TIMEOUT为11,现在,我们就可以设置查询超时了,代码如下:

  1. $mysqli=mysqli_init();
  2. $mysqli->options(11/*MYSQL_OPT_READ_TIMEOUT*/,1);
  3. $mysql->real_connect(***);

不过, 因为在libmysql中有重试机制(尝试一次, 重试俩次),所以,最终我们设置的超时阈值都会三倍于我们设置的值.

也就是说,如果我们设置了MYSQL_OPT_READ_TIMEOUT为1,最终会在3s以后超时结束,也就是说,我们目前能设置的最短超时时, 就是3秒…

虽说大了点,不过总比没有好, 呵呵

相关广告
  • mysql设置查询超时方法 mysql设置查询超时方法 mysql设置查询超时方法
相关阅读

mysql设置查询超时方法

2019/10/10 17:33:28 | 谷歌SEO算法 | 友情链接作弊