位置: 编程技术 - 正文

浅析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服务启动失败的快速解决方法

  • 安保服务税点
  • 税控盘开票软件访问数据库错误
  • 应交代扣利息税
  • 小规模结转增值税会计科目有哪些
  • 清算资产处置
  • 公对私转账没有到账怎么查询
  • 个人所得税报税孩子的夫妻双方都报吗
  • 超定额废品损失会计分录
  • 广告制作税目
  • 同一控制下资产收购
  • 资产负债表存货为负数原因
  • 期间费用如何设置项目核算
  • 固定资产原值增加当月计提折旧吗
  • 委托其他公司开票收款
  • 固定资产后续支出
  • 其他应付为负数怎么处理
  • 销售不同税率的货物会计处理
  • 固定资产计提折
  • 出借包装物收取的押金属于什么
  • 润滑油经销需要什么资质
  • 建筑行业增值税税率是多少
  • 前期差错更正中所得税的会计处理
  • 公司三季度亏损20个亿这股票值得买吗
  • 印花税税率需要记忆吗
  • 以旧换新增值税税率是多少
  • 转账支票背书是什么意思啊
  • 其他货币资金怎么做账
  • 进项税额转出再转入
  • 用人单位在职职工年平均工资怎么算
  • 新手会计怎么入门做账
  • 美团收入怎么处理的?
  • 促销费影响主营利润吗
  • 自产自用产品的会计处理
  • 应收账款零头会计处理
  • 奖励先进个人计划怎么写
  • 劳务外包开什么样的发票
  • 一般纳税人购进农产品如何抵扣进项税额
  • mac笔记本装了双系统后打开苹果系统和原来一样吗
  • 进程控制块PCB不包括( )
  • PHP:pcntl_fork()的用法_PCNTL函数
  • php 分页
  • 洛阿雷城堡,西班牙韦斯卡 (© Sebastian Wasek/Alamy)
  • 建筑安装收入会计分录
  • 企业合并发生的交易费用
  • thinkphp案例
  • taskset命令详解
  • 员工离职补偿怎么入账
  • python中strftime用法
  • 织梦采集器图片本地化
  • 新企业职工工资怎么算
  • 食堂账目怎么做
  • 会计准则中规范性的内容
  • 应纳税所得额是净利润吗
  • 对公账户的钱都可以取吗
  • 利息收入如何入会计科目
  • 转账支付水电费
  • 什么是补偿性余额,对银行借款的成本有何影响?
  • 银行利息收入如何记账
  • 现金支付货款怎么做账
  • 借方会计科目表
  • 公司车子折旧相差多少
  • 社保可以不计提账务处理
  • 新成立的公司哪个地方能查到
  • ubuntu系统怎么修改root密码
  • xp系统怎么取消密码怎么设置
  • qqpcrtp.exe是什么进程 如何删除qqpcrtp进程
  • vmware怎么配置网络
  • win7运行老游戏方法
  • 全网最全的小说阅读器
  • Linux系统安装字体
  • jquery绑定事件和移除事件
  • javascript的理解
  • shell脚本实现文件移动、复制等操作
  • web技术栈
  • nvm-windows
  • offset function
  • unity持久化存储
  • jquery mobile 加载页面
  • 税务稽查协查管理办法 国家税务总局
  • 广西国税发票查询系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设