reading

reading, SQL Server

读书《100 SQL Server Mistakes and How to Avoid Them》第十章 优化

第十章 优化 本章涵盖 实例级优化 查询优化 表优化 事务隔离级别 通过增加硬件来解决性能问题 在本章中,我们将深入探讨与 SQL Server 性能优化相关的错误和误解。我们将从实例级优化开始,讨论已弃用的跟踪标志的使用、关于即时文件初始化的误解以及内存配置错误。错误大致有两种类型:未能优化和错误的优化。   未能优化 我最近目睹了一次优化失败。我被要求查看一个提取、转换和加载(ETL)过程,这个过程在将数据加载到数据仓库时花费了大量时间。经过对该过程的检查,很明显团队没有进行容量规划(参见第9章)。虽然磁盘还有剩余空间,但数据文件的大小并未考虑每晚被导入数据库的大量数据。这导致数据文件在每晚多次以小增量扩展。即时文件初始化没有启用,这意味着每次增加文件空间时都会被清零,这在本章讨论的第二个错误中提到。启用即时文件初始化立即解决了问题,但我也让团队去规划他们的容量并相应地调整磁盘大小。 然后我们将继续讨论在优化查询时犯的错误。其中第一个错误是在本应与优化器合作时却与其对抗。接下来我们将讨论查询处理反馈,这一点经常被数据库管理员(DBA)忽视。   我们将继续研究表优化。在这里,我们将讨论一个常见的错误,即忽视有用的性能优化技术,包括分区表和压缩表。   接下来我们将看交易隔离级别,在这里我们将探讨我一次又一次看到的错误和误解。最后,我们将讨论当我们决定通过增加硬件来解决性能问题时会发生什么。 […]

reading, SQL Server

读书《100 SQL Server Mistakes and How to Avoid Them》第九章 实例和数据库管理

第九章 实例和数据库管理 本章涵盖 常见的维护错误和误解 容量规划 数据库损坏 管理脚本 补丁 在本章中,我们将讨论偶然成为数据库管理员(DBA)的人常犯的维护和配置错误。作为本主题的一部分,我们将讨论在查看事务日志文件相关的一些误解之前,自动收缩数据库的影响,这些误解可能导致性能下降等问题。   接下来,我们将讨论容量规划。这是许多数据库管理员未能执行的任务,我们将看看潜在的后果。然后,我们将探讨一些关于脚本和自动化的常见错误,包括使用游标以及完全缺乏维护自动化。   最后,我们将探讨未能修补服务器的问题。我们将思考不进行修补的原因及其后果。我们还将讨论如何避免犯下这个错误。   本章的许多主题都集中在数据库管理员的日常工作上。因此,并非所有主题都会直接影响业务。然而,重要的是要记住,这些主题肯定会间接影响业务。例如,如果我们未能进行补丁更新,那么服务器被恶意攻击者攻击的风险就会增加,从而导致业务的巨大中断和声誉损害。   变化的是我们与业务团队的互动。到目前为止,我们讨论的大多数活动都是由业务团队主导的。相反,本章中的许多主题将由DBA团队主导,以避免或解决对业务的操作影响。例如,日志碎片化这样的问题并不是业务团队熟悉的,也不会要求我们去解决。相反,我们会持续关注这类问题,因为如果我们不关注,业务就会间接受到性能问题的影响。   对于本章中需要数据库的示例,我们将使用 MarketingArchive

reading, SQL Server

读书《100 SQL Server Mistakes and How to Avoid Them》第七章 错误处理、测试、源代码管理和部署

第七章 错误处理、测试、源代码管理和部署 本章涵盖处理 T-SQL 错误 代码故障排除 性能测试 现代开发实践   当人们想到数据库开发人员的角色时,很容易将注意力完全集中在编写高效的T-SQL代码上。然而,实际上,现代数据库开发人员必须考虑许多其他方面。错误处理是其中的第一个方面。如果一个过程在生产环境中抛出错误,我们希望能够优雅地处理该错误,以降低数据不一致等风险。错误处理甚至可以使代码重试,从而避免应用程序支持团队介入。我们也通常希望在错误发生时收到通知,以便进行调查。   我们还需要能够高效地调试代码错误。代码最终会有漏洞。这是生活的事实。当我们的代码中存在漏洞时,我们需要能够以高效的方式进行调试。如果写一段代码只需一天,但调试它却需要一周,那就毫无意义。因此,在处理复杂代码时,理解调试方法是至关重要的。   我经常看到SQL开发人员犯的一个常见错误是缺乏测试。我们将作为对SQL开发人员现代开发实践(缺乏)采用的更广泛的探讨的一部分来研究单元测试。我们将探讨将代码保存在源代码控制中、编写单元测试以及使用自动化构建和部署管道的好处。在第4章中,我们创建了一个名为MagicChoc的数据库,在第6章中,我们创建了一个名为Marketing的数据库。本章中我们将使用这两个数据库。   现代开发实践要求代码保存在源代码管理中,并使用 DevOps 流程来部署代码。这些实践多年来已经成为常态,但 SQL 开发人员似乎采用得较晚。我见过许多

reading, SQL Server

读书《100 SQL Server Mistakes and How to Avoid Them》第四章 数据库设计

第四章 数据库设计 本章涵盖了 SQL Server 中的设计错误以及为什么避免这些错误很重要 未能对数据库进行规范化的错误 设计和创建键时出现的错误   在本章中,我们将讨论在设计数据库时常见的错误。这些错误可能导致多种挑战,从而造成代码性能不佳等问题。   设计错误是在开发生命周期的最早阶段引入的,此时还没有编写任何代码。为了说明这一点,让我们关注 MagicChoc 公司。该公司认为其流程过于分散,因此委托开发一款新应用程序,该应用程序将把其非互联网销售和采购功能整合到单一界面和单一后台中。为此,MagicChoc 的管理团队表示他们希望存储以下数据项:   销售订单日期 销售订单号 销售人员姓名 销售人员邮箱

reading, SQL Server

读书《100 SQL Server Mistakes and How to Avoid Them》第三章 数据类型

第三章 数据类型 本章内容包括: 数据类型的重要性 使用错误标准数据类型的后果 使用高级数据类型的原因 处理 XML 和 JSON 数据的好处   错误6# 始终将整数存储为 INT 想象一下,我们有一个大型数据仓库。一个事实表有10亿行,并且与五个维度表关联,这些维度表各有30,000行。由于缓冲区缓存中的数据量大,性能很差且内存总是满的。当查询运行时,大量数据被写入TempDB。我们已经优化了查询,也已经审查了索引策略,并确保索引和统计信息都得到了良好的维护。看起来唯一能做的事情就是增加更多的硬件,但根据过去两年的趋势,我们怀疑如果增加更多的内存,只会将问题推到下一阶段。我们应该怎么做?一个起点是考虑审查我们的数值数据类型,特别是那些在主键/外键关系中使用的类型。   INT 是 SQL

[quads id="805"]
Scroll to Top