찾다
데이터 베이스MySQL 튜토리얼浅析mysql交互式连接&非交互式连接_MySQL

交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议。

非交互式操作:就是你在你的项目中进行程序调用。比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接。那么这时候就是非交互式操作。 

在之前,我基本上不关系这两个属性,都是用的是mysql服务商推荐的默认值,就是8小时。

但是,从昨天开始,由于在新网租用了一个空间,而他的mysql的wait_time设置了10s,所以引出来一系列的问题,就顺便来研究下。

或者这个标题可以改为“mysql的8小时自动关闭”问题,这个标题你到百度上搜搜,一搜一大堆,但是都没有讲明白,今天我就给大家来说说这两个值。

一、概念

1)interactive_time:是指如果空余Ns(N就是这个属性的值),那么就会自动关闭mysql的连接。关闭什么样的mysql连接?在之前,我们在《什么是mysql的交互式操作和非交互式操作?》 这篇文章中讲到,mysql是有两种操作方式,那就有两种连接的,一种是交互式,一种是非交互式。而这个属性控制的是交互式。就是你打开一个mysql客 户端黑窗口,进入操作之后,又隔了Ns你不操作了,之后你想继续操作,对不起,mysql会在之前关闭了你的那个连接,mysql会帮你自动重新连接。

2)wait_time:是指如果空余Ns(N就是这个属性的值),那么会自动kill掉mysql的一部分连接线程。这里的连接就是指的是非交互式连接。

总结下,就是用比较正规的术语讲:

(1)interactive_timeout:

参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。

参数默认值:28800秒(8小时)

(2)wait_timeout:

参数含义:服务器关闭非交互连接之前等待活动的秒数。

在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

参数默认值:28800秒(8小时)

这里有引出了另外一个概念:mysql_real_connect(),这个好理解,就是你不管什么连接,是交互式还是非交互式,你要操作mysql之前要必须执行完毕的方法,其实你可以理解成登录mysql,或者拿到mysql的一个连接。

二、如何查看、重新设置这两个值

这是我修改之后的。这是查看方法。

修改这两个值是分为两种修改的。

1) 修改当前会话的这两个属性值。所谓的当前会话就是你当前获取的连接池的连接。比如你打开黑窗口那个会话。这个修改比较简单,直接set wait_timeout=10;就行了,你怎么知道这么修改仅仅修改的是当前会话?很简单,你把这个黑窗口关了,你再重新开一个,再重新查,你发现没改 啊。

2)修改全局的属性值。一般这个用的多,你到你的数据库安装包下找到my.ini,在最下面添加wait_timeout=10就可以了,然后重新启动mysql服务,我说的重新启动服务,不是你关闭这个黑窗口,重新启动一个黑窗口。服务在我的电脑右键服务里去找。

现在先说到这里,一会继续。 

一、mysql8小时异常 

1)异常概念。

大 家都知道mysql的8小时自动断开异常吧,百度上一大把。就是由于这个值造成的,这个值mysql默认的是8小时,所以如果你在8小时内,数据库觉得没 有任何人来连接我,那好,我就将所有的现在存在的非交互式连接全部kill掉。而ssh中,我们一般用的是数据池。就是在tomcat已启动的时候,就向 mysql申请到N(这个N是你配置的)个非交互是连接,以后想要用数据库连接的时候,没有必要一个请求就去重新获取mysql连接,只要从数据池里获取 就可以了。但是现在如果你8小时之内,没有发送请求,那么mysql会自动将所有的非交互是连接kill掉,那这时候,你的数据库连接池里存在的数据库连 接其实是null,是不存在的,你这时候也不判断,继续想用这个链接去请求数据,当然会抛出异常,所抛出的异常Communications link failure due to underlying exception。 

2)那么如何解决呢?

原 理很简单,出现这个异常的原因不就是因为连接池里存在着已经不存在的连接,而且你还不知道,你还得用这个原本就被关闭的连接去请求吗?这就好办了,你控制 了不了服务器的mysql(如果你是空间的话),那你知道控制自己的数据库连接池了,让连接池增加一个验证功能,就是凡是在从池里拿到连接之后,在用之前 先验证下这个链接是否有效,如果有效则可以直接使用,如果无效则重新申请一个连接,这样就不会出现这个异常了。当然,肯定性能会降低。关于性能为什么降 低,我们稍后会讲,现在来看,如何实现让数据库连接池先验证是否有效再用的功能:

我用的连接池是c3p0,建议使用这个。当然各个连接池的性能优缺点你得根据自己的项目具体分析,这里可不分析我为什么选c3p0了。

<property name="testConnectionOnCheckin" value="true"/>//归还给连接池时候要检查
<property name="testConnectionOnCheckout" value="true"/>//从连接池中拿出来要检查 
 <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout">false</property>
  
<!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->
<property name="testConnectionOnCheckin">true</property> 

所以也就是通过两个动作去维护这个连接池,如图:

3)解决方案的性能问题

A)检测有效性的性能优化

因为要去时刻检查这个链接是否还有效,所以效率比如会降低,那么如何检查呢?默认的检查方式我现在还真不知道,但是上面一段话说了,如果使用 automaticTestTable 方法进行验证测试连接的有效性,会对性能有所提升。那我们就来看下这个属性

1

这 个属性是什么意思呢?就是他会自动的帮你建立一张名字叫C3P0TestTable的表,这种表非常的简单,而且最关键的是里面没有数据,检测的时候,可 以通过连接访问这种表是否能访问的到,如果能访问的到,说明这个链接是有效的,否则说明这个链接已经被mysql kill掉了。

那这张表是我们程序员建立的吗?NO,你不用管,你只要这么配置上,自然会帮你自动建立一张这个表的。

B)testConnectionOnCheckout 性能的优化。因为这个属性是指你从连接池中拿出来的时候,在每一个链接去真正提交,震中拿着这个链接去数据库访问的时候,要做下检查,并不是说,我从连接 池中拿出来,我就做检查,我得等到提交的时候才做检查的,那这样会设计到一个connection提交的问题,在默认的情况下,你发送一个db request就会自动马上去执行,就会马上commit的,如果你配置在事务当中呢,就是一个action方法对应一个biz方法,这样你只要做一次检 查就行了,减少了检测的次数。

也就是说,对于这种解决方案的性能优化的宗旨就是减少检测次数、优化检测方法。

二、mysql的wait_timeout值应该设置多少?

如果你不是IDC,你不是往外出租服务器,那么你完全可以设置为默认值8小时就可以了。但是如果IDC往外租用服务器的时候,就得重新设置了,比如新网就是设置为10s的。

但 是这个设置为多大,并不是新网那样随便设置的,因为我发现新网的这个服务器业务压力并不是很大,但是他却设置了一个10s这么小的值,这样反而会更消耗服 务器资源。是,得承认,如果这个值过大的话,很可能会造成大量的无用的闲置的连接存在,对数据库压力过大,但是新网的那个服务器的业务压力并不大啊,你设 置成这么小的数值,很明显,你是在刻意的增加系统服务器的业务压力啊,罪人啊罪人。

所以,设置为多大,得根据你的服务器的压力大小来配置的,可不是随便写一个数就行了的。

以上这篇浅析mysql交互式连接&非交互式连接就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기