百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

25个SQL性能优化方面的面试问题(sql性能调优面试题)

mhr18 2024-10-02 16:35 119 浏览 0 评论


介绍:

无论您是创建Web应用程序的开发人员,还是参与Web测试的DBA或测试人员,SQL方面的技巧在数据库编程和数据库验证中都非常重要。因此,我们整理了25个SQL性能优化方面的面试问题

SQL性能优化是一项艰巨的任务,并且是处理Web应用程序日益增加的负载的关键。

因此,我们有选择地选择了25个SQL性能优化方面的面试问题,这些问题可以使您充分了解SQL性能优化概念。

问:1. 什么是SQL查询优化?

答: 查询优化是一种以某种方式编写查询以便可以快速执行的过程。对于任何标准应用而言,这都是重要的一步。


问:2. 有哪些技巧可以提高SQL查询的性能?

答: 优化SQL查询可以对性??能带来实质性的积极影响。它还取决于您所拥有的RDBMS知识水平。现在让我们看一下调整SQL查询的一些技巧。

1.尽量不要编写冗长的查询,使用视图和存储过程,它有助于最大程度地减少网络负载。

2.最好引入约束而不是触发器。它们比触发器更有效,并且可以提高性能。

3.使用表级变量而不是临时表。

4. UNION ALL子句的响应速度比UNION快。它不会查找重复的行,而UNION语句会查找重复的行,无论它们是否存在。

5.防止使用DISTINCT和HAVING子句。

6.避免过多使用SQL游标。

7.构建存储过程时,请使用SET NOCOUNT ON子句。它表示受T-SQL语句影响的行。这将导致网络流量减少。

8.优良作法是返回所需的列而不是表的所有列。

9.最好不要使用复杂的Join,并避免不当地使用触发器。

10.创建表索引并遵守标准

问:3. 有哪些影响数据库性能的瓶颈?

答: 在Web应用程序中,数据库层可能被证明是实现最后一英里可扩展性的关键瓶颈。如果数据库存在性能泄漏,则可能成为瓶颈,并可能导致问题。一些常见的性能问题如下。

1. CPU使用率异常是最明显的性能瓶颈。但是,您可以通过扩容CPU或替换为高级CPU来修复它。它可能看起来像是一个简单的问题,但异常的CPU使用率可能导致其他问题。

2.内存不足是下一个最常见的瓶颈。如果服务器无法管理峰值负载,那么它将对性能造成很大的问号。对于任何应用程序来说,执行内存都是至关重要的,因为它比持久性内存要快。同样,当RAM下降到特定阈值时,操作系统将转向使用交换内存。但这会使应用程序运行非常缓慢。

您可以通过扩容RAM来解决它,但是如果有内存泄漏,它将无法解决。在这种情况下,您需要分析应用程序,以识别其代码中的潜在泄漏。

3.对外部存储设备(如SATA磁盘)的过度依赖也可能成为瓶颈。在将大量数据写入磁盘时,其影响显而易见。如果输出操作非常慢,则很明显表明问题已成为瓶颈。

在这种情况下,您需要进行扩容,用更快的驱动器替换现有驱动器。尝试升级到SSD硬盘驱动器或类似产品。


问:4. 改善SQL性能涉及哪些步骤?

答:

  • 发现–首先,找出需要改进的地方。探索诸如探查器,查询执行计划,SQL调优顾问,动态视图和自定义存储过程之类的工具。
  • 审核–集中讨论可用数据以隔离主要问题。
  • 提议–这是一种可以提高性能的标准方法。但是,您可以对其进行进一步自定义以最大程度地受益。

1.识别字段并创建索引。
2.修改大型查询以使用创建的索引。
3.刷新表和视图并更新统计信息。
4.重置现有索引并删除未使用的索引。
5.查找并清除死块。

  • 验证–测试SQL性能调整方法。定期监视进度。另外,跟踪是否对应用程序的其他部分有不利影响。
  • 发布–现在,是时候与团队中的每个人共享工作解决方案了。让他们知道所有最佳做法,以便他们可以轻松使用它。

问:5. 什么是执行计划(explain plan)?

答: 这是SQL中使用的术语,它显示其优化程序计划用于执行SELECT / UPDATE / INSERT / DELETE语句的执行计划。

问:6. 您如何分析执行计划?

答: 在分析说明计划时,请检查以下区域。

1.驱动表
2.联接顺序
3.联接方法
4.意外的笛卡尔积
5.嵌套循环,合并排序和哈希联接
6.全表扫描
7.未使用的索引
8.访问路径

问:7. 您如何使用执行计划调整查询?

答: 说明计划显示查询成本的完整输出,包括每个子查询。成本与查询执行时间成正比。该计划还在从查询中获取数据的同时在查询或子查询中描述了问题。

问:8. 什么是Summary advisor,它提供什么类型的信息?

答: Summary advisor是用于过滤和实例化视图的工具。通过为给定的工作负载选择适当的实例化视图集,它可以帮助提高SQL性能。它还提供有关实例化视图建议的数据。

问:9。是什么最有可能导致SQL查询运行慢至5分钟?

答: 很有可能,特定表中数据量的突然增加可能会减慢SQL查询的输出。因此,收集目标表的必要统计信息。另外,监视数据库级别或基础对象级别的任何更改。

问:10。什么是Latch Free Event?何时发生?系统如何处理?

答: 在Oracle中,当会话需要锁,试图获取它但由于其他人拥有它而失败时,就会发生“Latch Free Event”等待事件。

因此,它等待着等待,等待锁释放,然后醒来并再次尝,试锁上没有等待服务员的有序队列,因此最先到达的人可以得到它。

问:11. 什么是主动调整和被动调整?

答:

主动调整–架构师或DBA确定在设计和开发过程中哪些系统资源和可用的Oracle功能组合满足标准。

反应式调整–这是发现和消除瓶颈的自下而上的方法。目的是使Oracle响应更快。

问:12. 什么是基于规则的优化器和基于成本的优化器?

答: Oracle确定如何获取处理有效SQL语句所需的数据。它使用以下两种方法之一来做出此决定。

基于规则的优化器–如果服务器没有内部统计信息支持该语句引用的对象,则RBO方法将获得优先级。但是,Oracle将在以后的版本中弃用此方法。

基于成本的优化器–内部统计数据很多时,CBO将获得优先权。它验证几种可能的执行计划,并根据系统资源选择成本最低的计划。

问:13. Oracle中有哪些SQL性能调优增强功能?

答: Oracle提供了许多性能增强功能,其中包括:

1.自动性能诊断和调优功能
2.自动共享内存管理–它使Oracle可以控制SGA中的内存分配。
3.等待模型的改进–已经有了许多视图来增强等待模型。
4.自动优化器统计信息收集–使用称为GATHER_STATS_JOB的计划作业收集优化器统计信息。
5.动态采样–使服务器能够增强性能。
6. CPU Costing –这是优化器(CPU + I / O)的基本成本模型,其成本单位为时间优化器通知的时间。
7.基于规则的优化器过时-不再使用。
8.跟踪增强功能–端到端跟踪,该跟踪允许通过客户端标识符而不是使用典型的会话ID来识别客户端进程。

问:14. Oracle建议使用哪些调整指标?

答: 以下高级调整指示器可用于确定数据库是否出现瓶颈:

1.缓冲区高速缓存命中率。

它使用以下公式。

命中率=(逻辑读取–物理读取)/逻辑读取

方法:提高DB_CACHE_SIZE(9i之前的DB_BLOCK_BUFFERS),以提高命中率。

2.库缓存命中率。

方法:提高SHARED_POOL_SIZE以增加命中率。

问:15.您首先要检查SYSTEM表空间中是否有多个片段?

答: 首先,通过验证DBA_USERS视图,检查用户是否没有SYSTEM表空间作为其TEMPORARY或DEFAULT表空间分配。

问:16. 什么时候添加更多的复制锁存器?控制复制锁存器的参数是什么?

答: 如果复制锁存器的争用过多,请从“重做复制”锁存器命中率中检查。

在这种情况下,请通过初始化参数LOG_SIMULTANEOUS_COPIES添加更多复制锁存器,以将可用CPU数量增加一倍。

问:17. 您如何确认表空间是否有不成比例的碎片?

答: 您可以通过对照dba_free_space表检查SELECT的输出来确认它。如果它指出没有。表空间扩展的数量超过其数据文件的数量,则证明碎片过多。

问:18. 您可以如何优化%XYZ%查询?

答: 首先,设置优化器以扫描索引而不是表中的所有条目。您可以通过指定提示来实现。

请注意,检索较小的索引比扫描整个表所花费的时间更少。

问:19. Oracle中每个表的I / O统计信息在哪里?

答: 有一个称为UTLESTAT的报告,该报告显示每个表空间的I / O。但是,查找具有最大I / O的表无济于事。

问:20. 什么时候是重建索引的正确时间?

答: 首先,选择目标索引并运行“ ANALYZE INDEX VALIDATE STRUCTURE”命令。每次运行它时,都会在INDEX_STATS视图中创建一行。

但是,下次您运行ANALYZE INDEX命令时,该行将被覆盖。因此最好将视图的内容移动到本地表。之后,分析“ DEL_LF_ROWS”与“ LF_ROWS”的比率,并查看是否需要重建索引。

问:21. 您究竟将如何检查SQL查询的性能问题?

答: 通常情况下,数据库的运行速度并不慢,但是工作进程降低了性能。导致瓶颈的是异常的会话访问。

1.查看处于等待或监听模式的事件。
2.在特定会话中搜寻锁定的对象。
3.检查SQL查询是否指向正确的索引。
4.启动SQL Tuning Advisor,并分析目标SQL_ID以提出任何性能建议。
5.运行“ free”命令以检查RAM使用情况。另外,使用TOP命令来识别占用CPU的所有进程。

问:22. 您从STATSPACK报告中获得什么信息?

答: 我们可以从STATSPACK报告中获得以下统计信息。

1. WAIT notifiers
2. Load profile
3. Instance Efficiency Hit Ratio
4. Latch Waits
5. Top SQL
6. Instance Action
7. File I/O and Segment Stats
8. Memory allocation
9. Buffer Waits

问:23. 在表上创建索引需要考虑哪些因素?另外,如何选择索引列?

答: 索引的创建取决于以下因素。

1.表格大小,
2.数据量

如果表很大,而我们需要一个较小的报表,则最好创建索引。

关于用于索引的列,根据业务规则,应使用主键或唯一键来创建唯一索引。

问:24. 重做,回滚和撤消(Redo, Rollback, and Undo)之间的主要区别是什么?

重做–记录所有对数据所做的更改的日志,包括未提交和已提交的更改。

回滚–分段,用于存储更改前的先前数据状态。

撤消–有助于建立读取一致的数据视图。数据将存储在撤消表空间中。

问:25。 如果有多个服务器在运行,如何识别特定数据库实例的共享内存和信号量?

答: 设置以下参数以区分数据库实例的内存中资源。

1. SETMYPID
2. IPC
3. TRACEFILE_NAME

使用ORADEBUG命令探索其基础选项。

总结:

以上是主要针对Oracle的SQL性能优化面试问题。希望对你有所帮助

相关推荐

甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入

IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...

甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云

IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...

Spring Boot 自定义数据源设置,这些坑你踩过吗?

你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...

一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)

今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...

低代码建模平台-数据挖掘平台(低代码平台的实现方式)

现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...

navicat 17.2.7连接oracle数据库提示加载oracle库失败

系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...

开源“Windows”ReactOS更新:支持全屏应用

IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...

SSL 推出采用全模拟内置混音技术的模拟调音台Oracle

英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...

47道网络工程师常见面试题,看看有没有你不会的!

你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...

汉得信息:发布EBS系统安装启用JWS的高效解决方案

e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...

36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!

前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

手把手教你在嵌入式设备中使用SQLite3

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...

JAVA语言基础(java语言基础知识)

一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...

取消回复欢迎 发表评论: