我是第一次尝试使用Database Tuning Advisor.
我相信我已经解决了所有与权限相关的问题 - 需要SHOWPLAN,需要'DTA_tuninglog'的SELECT权限等.
然而,根据"建议",它没有显示任何内容.
它确实运行并且似乎正在工作,并且其输出中没有看起来很糟糕的错误,但没有给出建议.
我甚至尝试使用可怕的查询(大量的表扫描)创建一个虚拟数据库,使用索引显然可以做得更好,但它也没有显示任何建议.
也许我真正的问题是:我如何知道DTA何时实际工作,而我有一些配置问题导致它不产生输出?
有没有人有指针?
更多信息:
我正在使用'调整选项'的默认值
在数据库中使用的物理设计结构(PDS): 索引
采用分区策略: 无分区
要保留在数据库中的物理设计结构(PDS): 保留所有现有的PDS
对于Azure上托管的数据库,我可以查看在其上执行的查询的最近历史记录.这是通过Azure门户>数据库>管理>管理>查询性能.
不幸的是,那里发现的历史只涵盖了一小段时间(几分钟).我打算在我的数据库上创建非聚集索引,为此,需要在典型的一天获取对数据运行的真实查询的日志,而不是过去几分钟.
目前,我必须多次刷新页面并记录每次刷新的所有查询.即使这样,我在这个艰难的过程之后获得的日志只反映了执行的一小部分查询.有没有选择查看较长时期的历史记录?
谢谢.
我一直注意到Postgres(8.3)中简单聚合性能的一些问题.问题是,如果我有一个表(例如200M行),它是(customer_id,order_id)唯一的,那么查询select customer_id,max(order_id) from larger_table group by customer_id比执行以下操作的简单Java/JDBC程序慢一个数量级:
1)初始化一个空的HashMap customerMap(这将映射id - >最大订单大小)2)执行"select customer_id,order_id from greater_table",并获得一个流结果集3)迭代结果集,在每一行做类似的事情下列:
long id = resultSet.getLong("customer_id");
long order = resultSet.getLong("order_id");
if (!customerMap.containsKey(id))
customerMap.put(id,order);
else
customerMap.put(id,Math.max(order,customerMap.get(id)));
Run Code Online (Sandbox Code Playgroud)
预计会有这种性能差异吗?我不应该想,因为我认为上面的内容与内部发生的情况非常接近.是否有证据表明db存在错误/错误调整?
我已经看过很多次了,当我在SQL Server DataBase Engine Tuning Advisor中运行一些分析时,它建议我创建索引,如:
CREATE NONCLUSTERED INDEX [_index] ON [dbo].[SomeTable]
(
[Column1] ASC,
[Column2] ASC,
[Column3] ASC
)
INCLUDE ([PrimaryKeyColumn])
Run Code Online (Sandbox Code Playgroud)
将主键(聚簇索引)列包含在列列表中是否真的重要?我一直认为它默认包含在原始行的链接中.我错了吗?
更新: 我认为同样重要的是要注意它提出了这样的查询索引,如:SELECT [PrimaryKeyColumn] FROM [dbo].[SomeTable] WHERE ... [条件] ......它确实影响了性能和执行计划.所以据我所知,索引不包含真正的"聚集索引",而只是一些链接到行.是这样吗?
将兼容参数设置为11.2.0.0与11.2.0.4有什么区别吗?有任何优势/劣势吗?
我不确定这里是否可以提出这个问题或者是serverfault.我在想...除了从备份中恢复之外,有没有办法快速撤消SQL Server 2005 Tuning Advsor所做的更改?
哪个数据库是面向性能的,MySQL还是MariaDB?
哪种存储引擎更适合以下所有方面?
更新:我在下面自己回答了这个问题.
我正在尝试修复MySQL查询中的性能问题.我认为我所看到的是,将函数的结果赋给变量,然后运行带有与该变量进行比较的SELECT相对较慢.
但是,如果为了测试,我将比较替换为变量,并将其与我知道该函数将返回的字符串文字等效值(对于给定的场景)进行比较,然后查询运行得更快.
例如:
...
SET @metaphone_val := double_metaphone(p_parameter)); -- double metaphone is user defined
SELECT
SQL_CALC_FOUND_ROWS
t.col1,
t.col2,
...
FROM table t
WHERE
t.pre_set_metaphone_string = @metaphone_val -- OPTION A
t.pre_set_metaphone_string = 'PRN' -- OPTION B (Literal function return value for a given name)
Run Code Online (Sandbox Code Playgroud)
如果我使用选项A中的行,则查询速度很慢.
如果我使用选项B中的行,那么查询速度很快,就像您期望的任何简单字符串比较一样.
为什么?
有人可以告诉我数据库调优和数据库查询优化之间的确切区别吗?
我已阅读维基百科上的以下链接:
http://en.wikipedia.org/wiki/Query_optimization
http://en.wikipedia.org/wiki/Database_tuning
根据我的理解,数据库调优似乎不是别的,而是数据库查询优化。我还是很困惑
两者到底有什么区别?
我的公司有一组分析人员使用的mySQL服务器(通常一次使用3-4个)。最近,对于表数达10亿行(10 ^ 9条记录)的数据库,查询速度变慢,其中一些查询甚至需要几天的时间。
我们对微调一无所知,因此欢迎使用任何工具/经验法则找出造成问题的原因或至少将其缩小。
转到Workbench studio>表检查器,我发现了我们最常使用的数据库的以下关键值:
理想情况下,我想以最简单的方式微调服务器(更好),数据库(更糟)或两者(将来),以加快速度。
我的问题:
非常感谢。
mysql sql optimization database-administration database-tuning
我想运行sql profiler来查看数据库Sql Server 2008的性能,但恐怕在同一台计算机上运行Profiler会影响服务器的性能,并且我不想降低服务器的速度。
很久以前,我从一个DBA那里听说,他不从他连接到sql服务器的笔记本电脑上运行探查器,但这种方式不会影响服务器的性能。
令人费解的是,我的问题是如何从外部计算机运行Sql事件探查器而不导致sql server的性能下降?
sql-server sql-server-profiler sql-server-2008 database-performance database-tuning
我运行以下查询来估计从内存读取的索引页(缓冲区命中)与从磁盘读取的索引页的比率
select
t.schemaname,
t.relname as "Table Name",
io_i.indexrelname as "Index Name",
case when (io_i.idx_blks_hit <> 0 or io_i.idx_blks_read <> 0) then
round(io_i.idx_blks_hit/(io_i.idx_blks_hit::numeric +
io_i.idx_blks_read::numeric), 4) else null end as "Index Hit Ratio"
from
pg_stat_user_tables t
join pg_statio_user_indexes io_i on io_i.relid = t.relid
order by "Index Hit Ratio" desc;
Run Code Online (Sandbox Code Playgroud)
我有几个指数,这个比率太低(低于 0.7)。请告知可能的原因以及如何改进。
database-tuning ×12
performance ×4
mysql ×3
sql-server ×3
database ×2
indexing ×2
postgresql ×2
sql ×2
aggregates ×1
azure ×1
logging ×1
mariadb ×1
optimization ×1
oracle ×1
parameters ×1
query-tuning ×1