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
相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
druid Java 测试技术
Druid、C3P0、Tomcat Pool的性能测试与选型
    数据库连接池是每个使用数据库项目需要选择的,但是现在有C3P0、Druid、Tomcat Jdbc Pool,三种类型。为了测试一下每种连接池的性能,写了一个小程序,对数据库进行测试。      C3P0      c3p0-0.9.1.2.jar      Druid      druid-1.0.11.jar      Tomcat Jdbc Pool      comm
1375 0
|
22天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
119 7
性能工具之emqtt-bench BenchMark 测试示例
|
1月前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
29 0
|
16天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
5天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
16 0
|
7天前
|
测试技术 API
探索软件测试中的自动化工具与挑战
本文探讨了软件测试领域中自动化工具的应用与挑战。通过分析目前主流的自动化测试工具,探讨了其在提高测试效率、减少人工成本、增强测试覆盖率等方面的优势。然而,自动化测试也面临着诸如脆弱性、维护成本高等挑战。最后,提出了一些应对挑战的建议,以期为软件测试领域的自动化工作提供一些启示。
13 1
|
12天前
|
机器学习/深度学习 人工智能 测试技术
提升软件测试效率与准确性的策略与工具
【5月更文挑战第2天】 在软件开发生命周期中,测试阶段是确保产品质量的关键。然而,传统的测试方法往往耗时且容易出错。本文将探讨一系列现代软件测试策略和工具,旨在提高测试效率和准确性。我们将分析自动化测试框架、持续集成(CI)、测试驱动开发(TDD)以及人工智能(AI)在测试中的应用,并讨论如何结合这些技术和方法来优化测试流程。
|
13天前
|
敏捷开发 监控 测试技术
探索自动化测试工具Selenium Grid的高效集成策略
【4月更文挑战第30天】在现代Web应用的快速迭代和持续部署中,测试自动化已成为确保产品质量的关键。Selenium Grid作为一款支持多种浏览器和操作系统的测试工具,提供了并行执行测试用例的能力,极大地提升了测试效率。本文将深入探讨如何高效地将Selenium Grid集成到现有的测试框架中,以及实施过程中的最佳实践,帮助团队最大化测试覆盖率,同时降低资源消耗。
|
13天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
14天前
|
机器学习/深度学习 人工智能 机器人
深入理解自动化测试:框架、工具与实践
【4月更文挑战第30天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速市场交付的关键环节。本文将探讨自动化测试的核心框架、常用工具以及实际应用的最佳实践,旨在为软件测试工程师提供深入的理解和有效的策略,以改进其自动化测试流程。我们将分析几种流行的测试自动化框架,包括Selenium、Appium和JUnit,并讨论如何根据项目需求选择适合的工具。此外,文中还将介绍持续集成(CI)环境下的自动化测试策略,以及如何通过测试结果分析和报告来优化测试过程。目标是帮助读者构建更健壮、更高效的自动化测试系统。

热门文章

最新文章