Microsoft SQL Server性能调校

2023-10-25 15:58

本文主要是介绍Microsoft SQL Server性能调校,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【书名    】:Microsoft SQL Server性能调校
【出版社  】:电子工业出版社
【作者    】:胡百敬
【评价    】:★★★☆☆☆☆☆☆☆
【正文    】:

----------------------------------------------------------------------------------------------------
0001:
    判断力。
----------------------------------------------------------------------------------------------------
0002:
    技术可以教,而艺术不能教。
----------------------------------------------------------------------------------------------------
0003:
    性能问题的症结通常不是表象所显示出来的。从不同的方面去看,往往会有不同的解释。最简单的例子,当你
看到CPU很忙,长时间处于百分之百的使用率,可能直觉就是CPU性能不足。但其实可能是硬盘性能不足,或是内存
容量不够,让CPU一直忙于I/O。
----------------------------------------------------------------------------------------------------
0004:
    要有好的开发团队绝非一蹴而就,需要有长时间的培养,每个成员都有充足的培训训练,彼此有充分的合作默
契,如此才能产生出有效的系统。
----------------------------------------------------------------------------------------------------
0005:
    数据库不应该让前端程序代码直接存取数据表,而要通过视图,存储过程或用户自定义函数来存储,这样可以
提高数据表重新设计的自由度。
----------------------------------------------------------------------------------------------------
0006:
    做性能调校的第一项工作应该是建立性能的基线,它可能代表着调校前系统的各种数据,或是用户希望达到的
基本目标值,也可能是昔日系统正常运行时的某些数据值。基线就是用来做比较的,任何性能调校的动作都应该是
做数据的比较,不要诉诸情绪。
----------------------------------------------------------------------------------------------------
0007:
    成本意识。
----------------------------------------------------------------------------------------------------
0008:
    事前的整体评估很重要。
----------------------------------------------------------------------------------------------------
0009:
    最怕的就是像无头苍蝇盲目的错误尝试(trial and error)。
----------------------------------------------------------------------------------------------------
0010:
    判断专业与否就是看你是否可以立刻问到重点,而不是来来回回,反反复复问相同的问题。
----------------------------------------------------------------------------------------------------
0011:
    若无法简明的描述问题,代表你尚不了解问题,或者是没有抓到重点。
----------------------------------------------------------------------------------------------------
0012:
    最早开始的,最晚结束。
----------------------------------------------------------------------------------------------------
0013:
    谋定而后动。
----------------------------------------------------------------------------------------------------
0014:
    花现在的时间可以节省未来的时间(spend time now to save time later)。
----------------------------------------------------------------------------------------------------
0015:
    压垮骆驼的最后一根稻草。
----------------------------------------------------------------------------------------------------
0016:
    头痛医头,脚痛医脚。
----------------------------------------------------------------------------------------------------
0017:
    虽然我们要三思而行,但你依然要顾及到用户的感受,否则迟迟没有行动,甚至是搜集了太多的信息反而不知
道从哪里开始,用户在找你一段时间之后仍不见改善,会失去耐心。因此你要在取得信息、信息分析、构想计划、
谨慎执行、反省接口,以及安抚用户中取得平衡,这是很困难的一件事。
----------------------------------------------------------------------------------------------------
0018:
    尽量不要让数据库的文件与操作系统交换文件放在同一个物理硬盘上,这样容易抢硬盘。
----------------------------------------------------------------------------------------------------
0019:
    “事件探查器”可以用来跟踪SQL语句的执行情况,包括执行时的各种数据。
----------------------------------------------------------------------------------------------------
0020:
    DBCC:Database Console Command
----------------------------------------------------------------------------------------------------
0021:
    同步服务器与计算机的时间:net time \\服务器IP /set
----------------------------------------------------------------------------------------------------
0022:
    清除共享连接:net use * /del
----------------------------------------------------------------------------------------------------
0023:
    UNION ALL:不删除重复行,UNION的列中可以是大数据类型。
    UNION:删除重复行,UNION的列中不能是text、image等大数据类型。
----------------------------------------------------------------------------------------------------
0024:
    大量批处理数据操作时,若采用没有log行为一定比逐条数据由两次写入,先记录log后再写到数据库的操作为
快;因此将数据放入到新的数据表,SELECT...INTO一定比逐条做INSERT快;清空数据表TRUNCATE TABLE也一定比
DELETE快。
----------------------------------------------------------------------------------------------------
0025:
    调用存储过程时,如果指定了存储过程的所有者,则能节省搜索存储过程的时间。
----------------------------------------------------------------------------------------------------
0026:
    列出当前数据中各数据表的数据量:
    SET NOCOUNT ON
    DECLARE @db VARCHAR(20)
    SET @db = DB_NAME()
    DBCC UPDATEUSAGE(@db) WITH NO_INFOMSGS
    GO
    CREATE TABLE #tbl
    (
     表名 VARCHAR(50) null,
     条数 INT null,
     保留空间 VARCHAR(50) null,
     数据占用空间 VARCHAR(50) null,
     索引占用空间 VARCHAR(50) null,
     未使用空间 VARCHAR(50) null
    )
    DECLARE @tblName VARCHAR(50)

    DECLARE curTbls CURSOR FOR
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

    OPEN curTbls
    FETCH NEXT FROM curTbls INTO @tblName

    WHILE @@FETCH_STATUS = 0
     BEGIN
      INSERT #tbl EXEC sp_spaceused @tblName
      FETCH NEXT FROM curTbls INTO @tblName
     END

    CLOSE curTbls
    DEALLOCATE curTbls

    SELECT * FROM #tbl ORDER BY CONVERT(INT,LEFT(保留空间,LEN(保留空间)-2)) DESC

    DROP TABLE #tbl
----------------------------------------------------------------------------------------------------
0027:
    Northwind..sp_Rebuild:注意..是不能省略一个的。数据库名..对象名
----------------------------------------------------------------------------------------------------
0028:
    重新建立索引:DBCC DBREINDEX([tblA])
----------------------------------------------------------------------------------------------------
0029:
    一般来说,存储过程会放在某个用户自定义的数据库中,供使用该数据库数据的连接可以存取,或是命名存储
过程时,以“SP_”开头放在master系统数据库中,则所有的用户不管连接落在哪一个数据库,都可以调用(注意,
并不是以“SP_”就是全局存储过程,还必须放在master数据库中)。
----------------------------------------------------------------------------------------------------
0030:
    假设客户数据表中有一百万记录,而我们需要找寻:
    SELECT * FROM Customer WHERE CustomerID = 1
    若没有索引,则需要比较一百万次,若有以CustomerID字段建立的索引,则因为索引键值数据都必定以B-Tree
结构有顺序的摆放,所以可采用二分查找法找数据。也就是2的n次方大于记录数,就可以找到该笔数据。而2的20次
方大于一百万,因此最多20次查找就能找到。索引和非索引的性能的差距就非常大了。
----------------------------------------------------------------------------------------------------
0031:
    选择性:代表符合你查询条件的记录占总记录的百分比。选择性越高(也就是这个比例越小),越适合采用索
引。在选择性比较低的时候,通过非聚集索引存储是非常没有效率的存储方式,还不如直接做数据表扫描。
----------------------------------------------------------------------------------------------------
0032:
    在连接两个表时,选择性高的数据库适合做内表,选择性低的适合做外表。
----------------------------------------------------------------------------------------------------
0033:
    视图也可以建立索引,但是必须先有一个聚集索引,才能建立非聚集索引。且删除聚集索引的时候,同时删除
非聚集索引。
----------------------------------------------------------------------------------------------------
0034:
    含有不确定数值的列(视图中),不能建立索引,例如有GetDate()函数的列。
----------------------------------------------------------------------------------------------------
0035:
    执行事务之前,应该先设置锁超时(防止死锁):
    SET LOCK_TIMEOUT 500 --单位是ms
----------------------------------------------------------------------------------------------------
0036:
    要有习惯重新察看原先的代码,才能精益求精。
----------------------------------------------------------------------------------------------------
0037:
    重构是提高的很好方式。
----------------------------------------------------------------------------------------------------
0038:
    在开发过程中就应当考虑性能问题,而不是马后炮。
----------------------------------------------------------------------------------------------------
0039:
    sp_executesql存储过程与EXECUTE语法的功能相似。但sp_executesql可以缓存执行计划,供多人使用,性能会
高一些。
----------------------------------------------------------------------------------------------------

这篇关于Microsoft SQL Server性能调校的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/283606

相关文章

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J