位置: 编程技术 - 正文

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

  • 建筑业项目在外地在哪里交增值税
  • 土地价款抵扣增值税
  • 未实际处置资产损失税前扣除金额的分录?
  • 企业所得税季度预缴怎么计算
  • 个体户季报网上怎么报税
  • 销售使用过的固定资产放弃减税
  • 印花税申报成功后在哪缴税
  • 企业会计准则颁布部门
  • 做账一定要银行对账单吗
  • 年初未分配利润和年末未分配利润的关系
  • 固定资产投资损失怎么做账
  • 房地产企业预缴土地增值税
  • 债务清偿如何进行税务处理
  • 员工证书补贴标准
  • 砂子开票税率
  • 运费抵扣增值税是什么意思
  • 资本公积要交印花税账簿税吗
  • 外包服务费税率是多少
  • 应税货物销售额怎么计算
  • 委托销售的增值税税率
  • 季度申报财务报表如何更改
  • 电商企业如何确定产品结构
  • 递延收益现金流量附表项目
  • 买车的增票可以分两次吗
  • 集团内部资金往来用什么科目核算
  • 斐讯路由器地址在哪里看
  • 如何在excel中添加多行空白
  • 实发工资和报税工资
  • 发生股权转让时怎么处理
  • 公司帮员工交的社保公司可以退吗
  • 三证合一后的税务登记证查询方法
  • 出口转内销会计账务处理
  • win10分辨率调整
  • linux怎么自己写命令
  • 以房产投资联营,收取固定收入,不承担联营风险的房产
  • 高新企业研发费用比例
  • 简述项目融资风险的内容
  • lean in桑德伯格
  • 手续费在银行系统哪里查
  • php实现留言板功能
  • 对抗生成网络算法
  • 基于卷积神经网络的网络入侵检测算法设计与实现
  • vue鼠标悬浮菜单
  • 待摊费用在资产负债表里写在哪
  • vue文件下载功能
  • 一般纳税人设备安装税率
  • 短期借款属于经营活动还是筹资活动
  • 公司法人和经理的区别
  • 百旺税控盘会自动清卡吗
  • 买手机手续费怎么算的
  • sqlserver2005数据库导出数据成.sql
  • 用友t3怎样查明细账
  • 假如出口收汇的钱怎么办
  • 应收账款逾期什么意思
  • 交哪些费用
  • 凭证必须用凭证盒
  • 实收资本可以以现金入账吗
  • 计算结转本月未交增值税
  • 税后扣款怎么做账
  • 流动资产合计怎么算
  • linux的tar命令用法
  • win7任务栏变小图标
  • win8无法打开ie
  • 在linux系统中获取帮助信息的命令为
  • win8.1 操作中心
  • win降win7
  • css的transition和animation
  • unity导出exe文件
  • jQuery扩展+xml实现表单验证功能的方法
  • arp如何绑定
  • 读取fasta文件
  • jquery设置鼠标样式
  • unityprefab
  • unix linux
  • unity3d Human skin real time rendering with blood and water drop effect真实模拟人皮实时渲染之血液和水珠掉落效果
  • js验证正则表达式
  • jquery的each循环
  • react navigate
  • 广东省社保局打印参保缴费凭证
  • 湖北省税务局网站授权
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设