当前位置: 首页 > news >正文

c3p0和druid性能测试过程中sybase卡死的问题解决过程记录

起因

近期公司打算把之前项目中的c3p0数据库连接池更换为druid,在给出替换方案前,需要先给出测试数据证明druid性能优于c3p0,于是便写了个demo进行对比测试。
一开始先要确定配置的没有问题,起码先要可以操作数据,就运行了一下测试方法。由于运行的时候其他事耽误了一下,就跑了10min,然后插入了86万条数据到sybase数据库中。
在正式测试之前我打算把表中原有数据清空,然后便遇到了数据库卡死的情况,使用delete、drop均是如此。
在解决这个卡死的问题时,又发现了原本思路上的问题,总结大致如下。

问题分析

要进行两个连接池组件的对比测试,就需要保证数据库的前提条件是一样的,起码要相似,我一开始想的就是清空数据,清空数据的操作是delete,但是这个思路存在两个问题

问题一

delete操作删除数据并不会清除之前占用的空间,如果真的这样做了,那么测试的前提条件实际上是不一样的。

解决办法

因此,在我这次测试的场景中,清空数据的操作应该使用truncate,这个操作不仅会清空数据,还会清空这些数据占用的空间以及相应索引占用的空间。
只有这样才能更好的保证连接池组件测试前,数据库条件更接近,使外部环境的影响降低到更小。

问题二

但是,即便清空了数据表的数据,也清空了数据表的空间和索引占用的空间,还是存在着一个问题,那就是数据库日志的问题。
sybase在进行insert操作的时候会写日志,那么如果日志一直在增加,势必降低日志写入的性能,也就整体上降低了数据入库操作的性能,所以还应该每一次测试前都在清空数据的同时,也清空日志。
那么日志的问题,也是导致一开始所说删除86万数据使sybase卡死的主要原因了。
sybase在delete操作时,也会写日志,而这个日志的大小是有默认值的,并且不会自动释放。
由于我之前对数据库进行了很多操作,长达几个月的操作都没有清过日志,所以导致这一次insert八十多万数据后日志空间不足,然后再delete时sybase卡死。

解决办法

对于日志空间不足的问题,有两种解决办法,一是扩容,二是清日志,我这次选择的就是第二种,因此也只记录一下第二种。
首先,需要确定是否真的是日志空间不足,查询的命令如下:


sp_spaceused syslogs

如果确定了确实是日志空间不足了,那么就可以再使用如下命令清除历史日志:

dump transaction dbname with truncate_only

清除日志的操作并不唯一,上述清日志的命令是比较安全的,会进行一些事物检查,因此性能就不如下边这条操作,而下边这条性能会变快,但是相对而言就没有那么安全,相当于是强制删除。

dump transaction dbname with no_log

相关文章:

  • Alamofire上传文件
  • django第一个app,3
  • 坦克大战1.0版
  • 【Html5】-- 塔台管制
  • 国内域名国内服务器,不备案解决80端口不开放方法
  • python
  • Java与Unix时间戳的相互转换
  • Intellij Idea编译项目下的.java文件时的编码问题
  • Windows上SSH服务器的配置以及客户端的连接
  • UIScrollView中使用AutoLayout
  • mysql LINESTRING ,POINT 类型操作
  • 读Git Pro2的笔记
  • Vue.js简介及指令
  • 全面分析 Spring 的编程式事务管理及声明式事务管理
  • jeesite优化
  • @jsonView过滤属性
  • [译]前端离线指南(上)
  • co.js - 让异步代码同步化
  • ES6 ...操作符
  • php ci框架整合银盛支付
  • Rancher-k8s加速安装文档
  • React+TypeScript入门
  • Tornado学习笔记(1)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 高程读书笔记 第六章 面向对象程序设计
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端技术周刊 2019-02-11 Serverless
  • 一天一个设计模式之JS实现——适配器模式
  • 一文看透浏览器架构
  • 积累各种好的链接
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #100天计划# 2013年9月29日
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (javascript)再说document.body.scrollTop的使用问题
  • (黑马C++)L06 重载与继承
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • :=
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ IO.File ] FileSystemWatcher
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [\u4e00-\u9fa5] //匹配中文字符
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AIGC] Java 和 Kotlin 的区别
  • [BUG] Authentication Error
  • [BZOJ3223]文艺平衡树
  • [codeforces] 25E Test || hash
  • [Electron]ipcMain.on和ipcMain.handle的区别