位置: 编程技术 - 正文

浅析mysql交互式连接&非交互式连接(mysql交互操作过程中使用的语言是什么)

编辑:rootadmin

推荐整理分享浅析mysql交互式连接&非交互式连接(mysql交互操作过程中使用的语言是什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql交互操作过程中使用的语言是什么,mysql交互式和非交互式,mysql非交互式操作,mysql交互式和非交互式,mysql交互式和非交互式,mysql交互操作过程中使用的语言是什么,mysql交互式和非交互式,mysql交互操作过程中使用的语言是什么,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

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

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

或者这个标题可以改为“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选项的客户端。

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

(2)wait_timeout:

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

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

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

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

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

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

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

浅析mysql交互式连接&非交互式连接(mysql交互操作过程中使用的语言是什么)

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

2)修改全局的属性值。一般这个用的多,你到你的数据库安装包下找到my.ini,在最下面添加wait_timeout=就可以了,然后重新启动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了。

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

3)解决方案的性能问题

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

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

1 <property name="automaticTestTable" value="C3P0TestTable"/>

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

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

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

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

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

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

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

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

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

CentOS 7下MySQL服务启动失败的快速解决方法 今天,启动MySQL服务器失败,如下所示:[root@spark~]#/etc/init.d/mysqldstartStartingmysqld(viasystemctl):Jobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"syste

MySQL中的基本查询语句学习笔记 1.基本查询语句select属性列表from表名和视图列表[where条件表达式1][groupby属性名1[having条件表达式2]][orderby属性名2[asc|desc]]2.单表查询1)使用*查询所有字

详解MySQL中的分组查询与连接查询语句 分组查询groupbygroupby属性名[having条件表达式][withrollup]属性名指按照该字段值进行分组;having条件表达式用来限制分组后的显示,满足条件的结果将被显

标签: mysql交互操作过程中使用的语言是什么

本文链接地址:https://www.jiuchutong.com/biancheng/319781.html 转载请保留说明!

上一篇:MySQL常见错误有哪些_MySQL常见错误的快速解决方法(mysql错误提示)

下一篇:CentOS 7下MySQL服务启动失败的快速解决方法

  • 交城市维护建设税填什么凭证
  • 跨年度进项税额转出怎么申报
  • 小规模不动产租赁增值税税率是多少
  • 季报利润表本期数
  • 外籍个人工资薪金汇出境
  • 异地成立分公司
  • 空白作废什么意思
  • 外贸企业出口采购流程
  • 银行汇票退回
  • 事业单位的股东是什么
  • 暂估应付账款借方余额
  • 承包租赁成本明细表的预算项目
  • 政府补贴转给其他公司
  • 发票冲红还需要作废吗
  • 期末结转增值税顺序
  • 收入准则建造合同预付款
  • 工资薪金支出税收额是什么意思
  • 必要收益率的计算题目
  • 季报的利润表是填本期金额还是本年
  • 个税0申报逾期一年
  • 个人所得税申报截止时间
  • 厂房维修是否可以退税
  • 物业公司营业成本包括哪些
  • 修改apache的http服务端口为8080
  • win7系统鼠标不能用了怎么设置
  • 电脑c盘被损坏怎么修复
  • linux系统中文输入法切换不出来
  • 消耗性生物资产减值准备一经计提不得转回
  • php yeid
  • 贷记卡怎么还利息
  • 分析卡拉哈迪沙漠的形成原因
  • 怎么做委托银行业务
  • 基西米河生态退化原因
  • 布拉塞龙图片
  • yii2带搜索功能的下拉框实例详解
  • 同业拆入属于哪个行业
  • php调用微信扫描二维码
  • php如何连接sql server
  • 持有至到期投资账务处理
  • 稚晖君的学历
  • JavaScript(WebAPI)+具体案例
  • apt-show-versions
  • 外国人在中国工作的基本条件
  • 增值税不超过10万免征
  • 财政拨款结余的明细科目有哪些
  • 个人所得税专项附加扣除赡养老人
  • 企业应纳税总额怎么算
  • 个人建筑安装属于劳务吗
  • sql server更新数据
  • 付给对方钱对方应该怎么写
  • 部门召开会议
  • 公司交社保有什么用处
  • 企业存货明细表和盘点表
  • 农产品免税收入需要缴纳所得税吗
  • 成品油经销企业资质
  • 福利部门的福利有哪些
  • 研发费用凭证附件
  • 发票没有银行账号可以吗
  • 外汇申报国家代码表
  • 会计记账中借方和贷方
  • 建账过程中应注意的事项
  • MySQL 5.5.x my.cnf参数配置优化详解
  • mssql查找备注(text,ntext)类型字段为空的方法
  • 了解的近义词
  • 如何创作图文并茂的图片
  • mac文本编辑怎么删除
  • u盘制作iso镜像文件启动
  • windows7的关闭方法
  • w10 xbox
  • linux磁盘结构
  • linux 文件夹权限 777
  • linux执行sh文件显示不存在
  • linux sed
  • bootstrap怎样为进度条添加动画
  • python常见的格式化输出小结
  • js调用url接口
  • js怎么获取密码框内容
  • 那些so 叼的android studio 插件
  • 什么是党建工作一体化
  • 棚户区改造的回迁房能办房产证吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设