记一次性能调优:Java+SQLServer

【问题描述】

系统包含PC管理端和移动端,生产环境在用户访问高峰时间段数据无法加载,卡死,如图:

【问题定位】

  1. 生产环境
    单机部署:
    应用服务JRE8 WebApplication
    Web服务器Jetty
    操作系统Windwos Server 2008
    数据库SQLServer 2008 R2

    外部对接:
    接收外部系统的图片推送,保存到服务器磁盘;
     
  2. 应用卡死时查看服务器性能
    磁盘IO:

    网络连接:

    CPU使用情况:

    可以看到服务器在高峰时间段明显的会出现性能瓶颈,各个方面指标都出现明显峰值,需要对性能进行综合优化;
  3. 应用过滤器中增加页面响应计时代码,监控响应大于10s的页面(根据系统实际卡顿情况设置):
    com.xloa.util.MyFilter

    根据控制台输出定位响应慢的页面;
  4. 数据库性能瓶颈定位
    查询慢SQL(脚本见附件):

    可以看到有三条SQL的执行时间达到了百秒级别,重点优化这些SQL;
  5. Java应用控制台提示数据库数据死锁;
  6. 磁盘IO读写频繁,通过系统内监视器:
    1. 读写压力主要是保存外部接口推送的图片, 图片5M左右,会有多张同时读写的进程;
    2. C盘空间会快速占据(非图片保存空间);

【问题分析及解决】

  1. 首先解决磁盘IO问题,因为IO缓慢,系统整体会性能下降;
    1. 外部接口调整,推送压缩后图片,减少读写压力;
    2. 外部接口进一步调整,只传入图片访问链接,本系统中不再保存图片,将压力转移到外部接口的服务器;
    3. 如果确实需要频繁读写,云主机更换高性能磁盘HDD->SSD;
    4. 文件存储要根据日期或月创建目录;
    5. C盘空间快速被占用,通过资源管理器中查看,是SQLServer的Report数据库占用空间快速增加,解决方法:
      1. 调整数据快照、日志等策略,降低备份频率,减少空间占用;如数据库有审计日志,定期清理;
      2. 新开专用数据库服务器;
         
  2. 响应慢的页面与数据库慢查询有关,首先优化慢查询:
    1. 分析慢查询,是查询部门等不经常变动信息,可以将信息保存到缓存中;
  3. 服务器连接数增大,一方面是本身业务需要有大量访问;另一方面是请求没有及时响应、响应时间较长;
    1. 本身业务需要有大量访问,调整Web服务器的并发连接数相关参数;如果问题仍然无法解决考虑增加负载均衡;本例在做了其他方面优化后,性能问题已经解决,成本考虑,没有做分布式部署;
    2. 请求响应慢,在进行了慢查询优化后得到了解决;
       
  4. 数据库死锁:

本例是对接数据的频繁写入造成,解决方案是将对接的数据先插入临时表,通过定时任务,读取临时表数据,设置任务的调度时间,减慢插入正式表的速度;
更进一步可以考虑读写分离及数据库集群;

【后记】

  1. 业务上如无必须,不重复保存数据,导致资源浪费,还增加风险。比如本次问题中外部接口已经保存了图片,本应用不必重复保存。
  2. 本次性能优化涉及到网络并发请求、数据库慢查询、磁盘读写,遇到性能问题时,要根据自身应用定位问题,然后采取相应的解决方案;

【相关脚本】

SQLServer查询慢SQL:

#清除缓存

 dbcc freeProcCache;

#然后查询慢SQL

SELECT
	DB_ID ( DB.dbid ) '数据库名',
	OBJECT_ID ( db.objectid ) '对象',
	QS.creation_time '编译计划的时间',
	QS.last_execution_time '上次执行计划的时间',
	QS.execution_count '执行的次数',
	QS.total_elapsed_time / 1000 '占用的总时间(毫秒)',
	QS.total_physical_reads '物理读取总次数',
	QS.total_worker_time / 1000 'CPU 时间总量(毫秒)',
	QS.total_logical_writes '逻辑写入总次数',
	QS.total_logical_reads N '逻辑读取总次数',
	QS.total_elapsed_time / 1000 N '总花费时间(毫秒)',
	SUBSTRING(
		ST.text,
		( QS.statement_start_offset / 2 ) + 1,
		(
			(
			CASE
					statement_end_offset 
					WHEN - 1 THEN
					DATALENGTH ( st.text ) ELSE QS.statement_end_offset 
				END - QS.statement_start_offset 
			) / 2 
		) + 1 
	) AS '执行语句' 
FROM
	sys.dm_exec_query_stats AS QS CROSS APPLY sys.dm_exec_sql_text ( QS.sql_handle ) AS ST
	INNER JOIN (
	SELECT
		* 
	FROM
		sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) 
	) DB ON QS.plan_handle = DB.plan_handle 
WHERE
	SUBSTRING(
		st.text,
		( qs.statement_start_offset / 2 ) + 1,
		(
			(
			CASE
					statement_end_offset 
					WHEN - 1 THEN
					DATALENGTH ( st.text ) ELSE qs.statement_end_offset 
				END - qs.statement_start_offset 
			) / 2 
		) + 1 
	) NOT LIKE '%fetch%' 
ORDER BY
	QS.total_elapsed_time / 1000 DESC

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: SQL Server 2019用户指南是一个面向开发人员和数据库管理员的详细手册,涵盖了SQL Server 2019的各个方面。该指南提供了关于配置、管理、开发和优化SQL Server数据库的重要信息。 首先,用户指南介绍了SQL Server 2019的新功能和改进之处。例如,它引入了Big Data Cluster的概念,这使得用户能够在SQL Server上处理大数据工作负载,并与Hadoop和Spark等开源技术进行无缝集成。用户指南还介绍了SQL Server 2019的数据虚拟化功能,用于对分布在不同服务器和数据源中的数据进行统一查询和分析。 接下来,用户指南提供了有关SQL Server 2019的安装和配置的详细说明。它涵盖了硬件要求、操作系统支持、内存和存储配置以及数据库引擎和其他组件的安装步骤。用户指南还提供了有关SQL Server身份验证和权限管理的信息,以及如何设置故障转移群集和可性群集等高可用性和容错功能的指导。 在开发方面,用户指南提供了有关使用Transact-SQL查询、存储过程和触发器的说明。还提供了使用其他编程语言(如C#和Java)连接和操作SQL Server数据库的指导。此外,用户指南还提供了有关数据管理和维护、备份和恢复以及性能调优的建议和最佳实践。 最后,用户指南还包含了有关SQL Server 2019的监控和故障排除的信息。它介绍了如何使用SQL Server Management Studio和其他工具来监视数据库性能和运行状况,并识别和解决常见的问题和故障。 总而言之,SQL Server 2019用户指南提供了对SQL Server 2019的全面了解,帮助用户充分利用该数据库管理系统的功能和性能。用户可以根据自己的需求和要求,逐步学习和实践相关的内容,以提高数据库开发和管理的技能。 ### 回答2: SQL Server 2019 用户指南是一本详细介绍 SQL Server 2019 数据库管理系统的指南。该指南适用于那些想要使用 SQL Server 2019 进行数据库管理的用户。 在该指南中,用户将了解到 SQL Server 2019 的各种功能和特性,包括但不限于: 1. 数据库安装与配置:介绍如何安装 SQL Server 2019 并进行必要的配置,以确保数据库能够正常运行。 2. 数据库创建与管理:介绍如何创建新的数据库,设置表和索引,管理用户权限等。 3. 查询和数据操作:介绍如何使用 SQL 查询语言来检索和操作数据库中的数据,包括常见的查询方式、连接表格以及其他高级查询。 4. 数据备份与恢复:介绍如何使用 SQL Server 2019 的备份和恢复功能来保护数据库免受数据丢失和灾难。 5. 性能优化:介绍如何使用 SQL Server 2019 的性能监视工具来分析和优化数据库性能,以确保数据库的高效运行。 此外,用户指南还涉及一些高级主题,如 SQL Server 2019 的安全性,高可用性和灾难恢复等。用户可以根据自己的需求来选择阅相关章节。 总的来说,SQL Server 2019 用户指南是一本详细而全面的指南,对于那些想要学习和掌握 SQL Server 2019 数据库管理的用户来说,是一本必不可少的参考书。通过学习这本指南,用户可以更好地理解 SQL Server 2019,并能够更有效地管理和维护数据库。 ### 回答3: SQL Server 2019用户指南是一本非常有用的参考书,可以帮助开发人员和数据库管理员更好地理解和使用SQL Server 2019数据库管理系统。 首先,该指南详细介绍了SQL Server 2019的特点和功能。SQL Server 2019是微软最新发布的数据库管理系统版本,具有很多新的功能和改进。例如,它引入了支持大规模分析的新功能,包括Big Data Clusters、Apache Spark和Hadoop集成。此外,它还增强了安全性和性能,包括优化的查询处理和自动调整功能。 其次,该指南包含了SQL Server 2019的安装和配置步骤。它提供了详细的指导,帮助用户正确地安装和配置SQL Server 2019,确保数据库系统能正常运行。此外,它还介绍了如何进行升级和迁移,帮助用户顺利地从旧版本升级到SQL Server 2019。 再次,该指南深入介绍了SQL Server 2019的管理和监控工具。它详细解释了如何使用SQL Server Management Studio (SSMS)和SQL Server Configuration Manager (SSCM)来管理和监控数据库系统。它还介绍了如何设置和管理备份和恢复策略,以确保数据库的可靠性和可恢复性。 最后,该指南提供了大量的示例和实用技巧,帮助用户更好地理解和应用SQL Server 2019。例如,它介绍了如何编高效的查询语句和存储过程,如何优化查询性能,以及如何使用索引和分区等高级功能。 总之,SQL Server 2019用户指南是一本非常实用的参考书,它提供了全面的知识和指导,帮助用户更好地使用和管理SQL Server 2019数据库管理系统。无论是开发人员还是数据库管理员,都可以从中获得很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭记北宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值