问题标签 [database-tuning-advisor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
602 浏览

sql - 在 select 子句中包含 nvarchar(max) 列会显着增加执行时间

我有一个由列和索引组成的简单表,如下所示。

列

索引

这是我根据 sql 数据库引擎优化顾问的建议创建的索引。它包括所有列。

每当我添加在图片 1 中检查的列时,执行时间都会严重增加。这是我的测试结果。

如果我不包括上述列。

(受影响的 54 行)表“PROPOSAL_PROCESS”。扫描计数 1,逻辑读取 58,物理读取 2,预读读取 55,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。

(1 行受影响)

SQL Server 执行时间: CPU 时间 = 31 毫秒,经过时间 = 16 毫秒。 SQL Server 解析和编译时间: CPU 时间 = 0 毫秒,运行时间 = 0 毫秒。

SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 0 毫秒。

如果我将 CURRENT_PROPOSAL_OBJECT 添加到先前查询的选择子句

(受影响的 54 行)表“PROPOSAL_PROCESS”。扫描计数 1,逻辑读取 58,物理读取 2,预读读取 55,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。

(1 行受影响)

SQL Server 执行时间: CPU 时间 = 0 毫秒,经过时间 = 545 毫秒。 SQL Server 解析和编译时间: CPU 时间 = 0 毫秒,运行时间 = 0 毫秒。

如果我将 INTERFACTORING_XML 添加到先前查询的选择子句

(受影响的 54 行)表“PROPOSAL_PROCESS”。扫描计数 1,逻辑读取 58,物理读取 2,预读读取 55,lob 逻辑读取 1822,lob 物理读取 376,lob 预读读取 0。

(1 行受影响)

SQL Server 执行时间: CPU 时间 = 47 毫秒,经过时间 = 2415 毫秒。 SQL Server 解析和编译时间: CPU 时间 = 0 毫秒,运行时间 = 0 毫秒。

如果我将 CURRENT_PROPOSAL_OBJECT 添加到先前查询的选择子句

(受影响的 54 行)表“PROPOSAL_PROCESS”。扫描计数 1,逻辑读取 58,物理读取 2,预读读取 55,lob 逻辑读取 5048,lob 物理读取 944,lob 预读读取 0。

(1 行受影响)

SQL Server 执行时间: CPU 时间 = 47 毫秒,经过时间 = 6912 毫秒。 SQL Server 解析和编译时间: CPU 时间 = 0 毫秒,运行时间 = 0 毫秒。

所以在一天结束时,我面临着 6912 英里的秒数。这种糟糕表现的原因是什么?

我想创建一些索引吗?这是由于将大尺寸的 nvarchar 放在同一张表中而导致设计不良的结果吗?

提前致谢

编辑:是重新生成问题的脚本。我试图在 sql-fiddle 上创建相同的问题,但它甚至没有插入一行。

编辑 2:如果我在 select 子句中包含所有列,并且只提供另一个提案 ID 使查询返回 2 行,则执行时间通常保持在 100 毫秒左右。查询执行时间会随着返回行的增加而变得越来越差。否与索引的联系。

0 投票
1 回答
155 浏览

sql-server - SQL Server 数据库优化顾问建议现有的聚集索引

我有一个表,其定义如下所示:

(有些列被忽略了,因为它们不相关)

我现在在针对该表的查询上运行 Database Tuning Advisor,它建议:

这显然与现有的主键相同。知道为什么它会建议这个吗?试图确保我没有遗漏有关 SQL Server 工作原理的信息,而不是顾问提出的一些荒谬的建议,因为这只是自动调优分析的局限性。


更多信息:我将产生此建议的查询分解为基本要素:

表自引用和查询作者将其连接到自身,以便将记录过滤到仅包含所述引用的记录。将查询更改为以下等效结果会导致顾问不再提出建议:

这是原始sql的执行计划:

执行计划

0 投票
0 回答
104 浏览

sql - Oracle 在实施 SQL Profile 后建议 TABLE ACCESS FULL

我基本上所做的就是使用 SQL Tuning Advisor 进行长查询。它建议我创建和 SQL Profile。创建配置文件后,我检查了查询的性能,没有发现太大差异,因此决定删除配置文件。但是现在,当我检查同一个查询的执行计划(为此我创建并删除了配置文件)时,它显示 Oracle 忽略了所有索引并且只对所有表执行 TABLE ACCESS FULL!你知道为什么会这样吗?

即使我稍微修改查询也会发生这种情况。对于其他查询,Oracle 像以前一样使用索引。

我尝试再次创建和删除配置文件,删除调整任务......但没有区别。

编辑:对不起,我现在检查了过去的执行计划,Oracle 在我对 sql 配置文件进行实验之前也在执行全表扫描。当我无意中改变了一些东西并且不知道是什么时,我错了。感谢您的回答。

0 投票
1 回答
203 浏览

mysql - Mysql 5.7 性能调优。存储过程响应时间过长

迁移到新服务器后,Mysql 存储过程花费了太多时间。存储过程花费太多时间来返回结果。我的cnf文件如下

有什么办法可以优化更多。

0 投票
1 回答
241 浏览

sql-server - 删除未使用的索引

我指的是未使用的索引脚本博客。

我知道如果Seek = 0, Scan = 0, Lookup = 0,User Update = 0那么我们应该删除索引,因为它不需要。

未使用的脚本给了我很多索引,但我应该删除所有这些索引吗?您能否帮助我理解从给定脚本中识别实际未使用的索引。

在删除之前,我想知道UserSeek, UserScans, UserLookups,列之间的重要性。UserUpdates

未使用的索引脚本 - 单击此处

0 投票
1 回答
472 浏览

postgresql - 需要 POSTGRES 调优的建议

我需要在我的数据库上频繁运行几个复杂的查询,我的一个查询需要大约 57 秒才能执行,我正在尝试一种调整我的 Postgres 数据库的方法,因此,我可以将执行时间减少一半或比那更多的。

我已经在表格上创建了​​索引并调整了一些参数,但这对我没有帮助。

我使用的是 Postgres 9.6 版,以下是我用来调整数据库的参数。

  1. 最大连接数 = 1500
  2. shared_buffers =8GB
  3. 有效缓存大小 = 8GB
  4. 维护工作内存 = 2GB
  5. checkpoint_completion_target = 0.7
  6. wal_buffers = 16MB
  7. default_statistics_target = 100
  8. random_page_cost = 1.1
  9. 有效 io_concurrency = 200
  10. work_mem = 910kB
  11. min_wal_size = 1GB
  12. max_wal_size = 4GB
  13. max_worker_processes = 48
  14. max_parallel_workers_per_gather = 24

查询如下

以下是查询计划