1.1 BugId=172659
bug描述
|
建档时间
|
终端回连数目为1000时,DMServer认证失败,即当终端回连数加大时,会偶尔出现认证失败的问题;
|
2011-07-29
|
【原因】计算MD5的工具类方法com.xxoo.dm.odomain.framework.tools.MD5#digest有问题,原因是不支持多线程处理。原来的代码如下:
public static byte[] digest(byte[] data) {
md.reset(); //md实例是不支持多线程的
return md.digest(data);
}
错误原因是MessageDigest类不支持多线程,现改成了如下的实现方式:
public static byte[] digest(byte[] data) {
return DigestUtils.md5(data);
}
1.2 BugId=176680
bug描述
|
建档时间
|
DMServer在边进行终端回连时边接收任务,会导致接收速度变慢
|
2011-09-05
|
【原因】这个问题的原因有两方面:
1. DMService模块和DMServer模块同时使用了一个logger的appender来输出日志,这样会造成两边有锁等待的现象;
2. DMService模块和DMServer模块同时使用了一个EJB的Locator,而这个实例内部也是有锁的,因此也会造成锁等待的情况出现;
现在的解决方法:
1. 修改log4j.xml,修改成了如下的配置,粗体是新增加的:
<logger name="com.xxoo.dm.odomain.dms" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="FILE_EJB"/>
<appender-ref ref="FILE_EJB_ERR"/>
</logger>
。。。
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./log/dmserver.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p] [%d] [%t] method:%c%n%m%n"/>
</layout>
</appender>
<appender name="FILE_EJB" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./log/dmservice.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%-5p] [%d] [%t] method:%c%n%m%n"/>
</layout>
</appender>
2. 拆分成使用两个EJB的Locator:
update_udpairinfo_ejb_config.xml 给DMServer的HTTP模块使用;
udinfomanagement_ejb_config.xml 给DMService模块使用;
分开成两个配置文件是因为JNDIServiceLocator-1.0.0.jar对同一个配置文件会生成一个对象锁,当两个模块都需要调用UDM的EJB时,就会存在锁等待问题,改成两个就不会出现这个问题了。
1.3 BugId=173444
bug描述
|
建档时间
|
smsdealer入队列数据量不对,即在某些情况下,会收到重复的自注册短信
|
2011-08-05
|
【原因】这个问题的原因是由jvm的Full GC造成的。
smsdealer模块从短信前置机接收短信后,需要向短信前置机回复响应应答,这个过程是有一个超时时间T的,当超过这个规定的超时时间,短信前置机还没有收到响应应答包,则短信前置机认为这条短信没有发送成功,就会将这条短信重新加入待发送的短信队列。而当jvm执行Full GC时,就会造成一定时间的停顿,若这个时间超过了上述规定的T,就会出现收到重复短信的问题。
目前的做法是将短信前置机的接收超时时间[RecvTimeOut=15]从15秒改成了60秒。
1.4 MyBatis缓存问题
问题:由于对ParamConfigRule.xml使用了缓存,即如下设置:
<cache-ref namespace="com.xxoo.dm.odomain.dms.dao.CommonDSUtilsDao"/>
<!--此命名空间的缓存策略配置如下-->
<cache eviction="LRU" size="5000" flushInterval="120000" readOnly="true"/>
因此mybatis会对此sqlmap文件中的所有select使用缓存,即查询结果会保存在缓存中,并且下次查询时会先从缓存中获取数据。
由于当时写代码的时候未考虑已经使用了缓存,因此加入了这样一行代码(见如下的粗体字):
ruleId = ruleIdList.get(0);
queryParamConfigRuleMap.put("ruleId", ruleId);
tmpParamConfigRuleList = (List<ParamConfigRule>) sqlSession
.selectList("com.ailk.dm.odomain.dms.dao.ParamConfigRuleDao.getParamConfigRules", queryParamConfigRuleMap);
if ((tmpParamConfigRuleList == null || tmpParamConfigRuleList.size() == 0)) {
throw new ParamConfigRuleNotExistsException("ParamConfigRule Not Exists with modelId=" + modelId
+ ", swv=" + swv + ", funcTypeId=" + funcTypeId);
}
paramConfigRuleList.addAll(tmpParamConfigRuleList);
tmpParamConfigRuleList.clear();
上面这一行粗体的代码会将当前查到的结果从缓存中删除,故下次调用此方法时,tmpParamConfigRuleList的结果实际就是空的,从而导致业务逻辑产生了异常。
解决方法是将上面这行代码删除,即在查询过程中不能清除使用了缓存策略的结果数据。
分享到:
相关推荐
以下是对"sql server性能优化总结"的详尽解读: 1. **查询优化**: - **索引优化**:索引是提高查询速度的关键。正确创建非聚簇和聚簇索引,根据查询模式选择合适的覆盖索引,以及定期维护索引(如重建和重新组织...
在SQL Server 2005性能测试实践中,我们经常会遇到CPU资源瓶颈的问题。这可能是由于多种因素导致的,包括但不限于未优化的查询、错误的数据库配置、设计缺陷以及硬件资源不足。在考虑增加CPU数量或升级CPU之前,应...
在SQL Server数据库管理系统中,死锁是一个常见的问题,它发生在两个或多个事务之间,每个事务都在等待对方释放资源,导致所有事务都无法继续执行。本文将深入探讨SQL Server死锁的概念、原因、诊断方法以及解决策略...
### SQL Server死锁总结 #### 一、死锁原理 死锁是计算机系统中常见的问题之一,特别是在数据库管理系统中,由于并发控制不当可能导致系统性能下降甚至完全停止响应。在SQL Server中,死锁指的是两个或多个事务...
- DmServer:核心数据库服务 - DmWatchService:监视服务 - DmRWWatchService:读写监视服务 - DmWatchMonitor:监视器服务 - DmWatcherService:观察者服务 - DmMonitorService:监控服务 - DmASMSvrService...
总结,Virgo Server作为Spring DM Server,结合了Spring框架的强大功能和OSGi的灵活性,为企业级Java应用提供了高效、可扩展的运行环境。通过使用Virgo Server,开发者可以享受到模块化带来的好处,提高代码的可维护...
总结来说,SQL Server的调试涉及到多个方面,包括使用SSMS调试器、分析执行计划、监控动态管理视图、优化查询性能、查看日志以及使用高级诊断工具。熟练掌握这些技巧,将有助于你更好地理解和解决问题,提升SQL ...
总结,清理SQL Server中的无效视图和存储过程是数据库维护的重要环节。通过使用Visual Studio或其他工具,结合适当的SQL查询,可以有效地管理这些无用对象,保持数据库的健康状态。同时,定期进行这样的清理工作,也...
总结一下,SQL Server 200的自动杀锁机制是为了高效处理数据库中的死锁问题。通过创建作业和存储过程,我们可以主动监控并解决死锁,同时通过日志跟踪进行性能优化。掌握这一技术对于确保数据库稳定性和提升应用性能...
这些内置函数可以帮助我们更全面地了解系统的运行状态,尤其是在排查性能瓶颈和死锁问题时非常有用。 #### 三、根据SPID查询导致死锁的SQL语句 当发现系统中有死锁现象时,可以通过特定的SPID进一步查询导致死锁的...
本节将详细介绍如何检测 SQL Server 中的死锁,并提供一种实用的解决方案来处理这些死锁问题。 ##### 1. 检测死锁 在 SQL Server 中,可以通过多种方式检测到死锁的发生: - **SQL Server 自动报告**:当 SQL ...
- **背景**:了解虚拟地址空间与物理内存的关系,以及它们对SQL Server性能的影响。 - **监测**:使用DMVs监控内存使用情况,如高速缓存、Ringbuffers、虚拟内存压力等。 - **应对措施**:调整内存分配策略,优化...
3. 性能测试:TPC-H测试软件的主要目标就是评估数据库在执行TPC-H查询时的性能。这包括查询响应时间、吞吐量以及资源消耗等指标。通过这些测试,用户可以比较不同数据库系统或优化配置的效果,以选择最适合其业务...
总结,DM8 达梦数据库不仅是一个高性能、高安全性的国产化数据库系统,其配套的管理工具更是简化了数据库的日常运维工作,为用户提供了便捷、高效的数据库管理体验。在当前国产化替代的大趋势下,DM8 达梦数据库无疑...
【SqlServer中如何解决session阻塞问题】 在数据库管理中,SQL Server中的session阻塞是一个常见的问题,特别是对于数据库运维人员而言。当一个数据库会话(session)中的事务持有锁,而其他会话试图访问这些被锁定...
安装完SP3后,对数据库进行性能测试,确保一切运行正常。如果有新的功能,学习并了解它们,以充分利用SP3带来的优势。 总结,为SQL Server打SP3补丁是维护数据库健康的关键步骤。遵循上述步骤,确保数据库系统始终...
总结来说,从SQL Server 2000到DM4的迁移涉及多个步骤,包括数据类型映射、数据表和视图的自动迁移以及存储过程和触发器的手动转换。这个过程需要对两种数据库系统的语法和特性有深入理解,以确保数据完整性和迁移后...
总结来说,参数化查询是SQL Server 2008中的一个重要性能优化技术,通过重用查询计划,减少了资源消耗,提升了查询速度。理解和掌握参数化查询的原理与应用,对于提升SQL Server应用程序的性能至关重要。