Questions tagged «performance»

对系统是否运行良好以适合目标的评估。通常,性能是指系统随时间完成一个或一组操作的速度。

2
您可以在SQL Server实例上查看哪些性能计数器来确定其性能以及所有运行状况?
我是埃因霍温丰提斯大学的一名学生,我目前正在进行一系列访谈,以帮助开发SQL Server工具,并且我希望获得该领域专家的反馈。 我的问题之一是: 您可以在SQL Server实例上查看哪些性能计数器以确定其性能和总体运行状况? 特别是当好转坏时,我对阈值感兴趣。 贾米尔·扬·埃因霍温荷兰

1
SQL Server 2008R2中的自动更新统计信息:尽管有大量的行插入,为什么有些统计信息仍然过时?
在调查慢速查询期间,似乎执行计划异常次优(一个嵌套循环执行900万次搜索执行,估计执行次数为1)。确认一些实际过时的相关统计数据后,我重新构建了统计数据,并且性能问题得到了有效解决。 此数据库已启用“自动更新统计信息”(默认情况下处于启用状态)。我了解根据20%+ 500行修改(更新/插入/删除)存在自动统计信息更新的阈值。在多个索引上似乎已大大超过了此阈值,因此似乎存在(A)自动更新问题或(B)更新策略的内容超出了我在网上能找到的范围文档。 我很欣赏可以设置一个计划任务来更新统计信息,如果找不到其他解决方案,这很可能是我们采用的方法,但是对于如此大量的修改为何不会触发更新,这确实使我们感到困惑。自动更新某些统计信息-了解为什么可以帮助我们确定计划任务需要更新哪些统计信息。 一些附加说明: 1)在数据库中发现了问题,该数据库中的数据是通过负载测试创建的,因此在短时间内添加了大量数据,因此,如果定期进行自动更新(例如,每天一次)大部分),则可以解释一些观察到的行为。另外,我们的负载测试往往会对数据库造成很大的压力,因此我想知道SQL是否会在负载很重的情况下推迟统计信息更新(由于某种原因随后不更新统计信息)。 2)在尝试使用包含连续的INSERT,SELECT和DELETE语句的测试脚本来重新创建此问题时,没有发生该问题。我想知道这里的区别是否在于这些语句每个都会影响每个SQL语句许多行,而我们的负载测试脚本将倾向于单独插入行。 3)有问题的数据库设置为“简单”恢复模型。 一些相关链接: 分析慢速运行查询的清单 使用统计信息来提高查询性能 我还通过Microsoft Connect提出了此问题: 自动更新统计信息:许多统计信息仍然过时 更新2011-06-30: 在进一步调查中,我认为超出阈值水平(例如500行+ 20%)的统计信息是问题查询未使用的统计信息,因此在运行查询时可能会对其进行更新。需要他们。对于查询所使用的统计信息,这些统计信息会定期更新。然后剩下的问题是,这些统计信息在仅插入了相对较少的插入次数之后(例如,导致上述900万次查找估计数量为1的情况),就严重误导了查询计划优化器。 我此时的直觉是,问题与主键选择不当有关,该键是使用NEWID()创建的唯一标识符,因此这会很快创建高度碎片化的索引-特别是作为SQL中的默认填充因子服务器是100%。我的直觉是,在相对较少的行插入之后,这会以某种方式导致统计数据产生误导-小于重新计算统计数据的阈值。这可能完全不是问题,因为我已经生成了很多数据而没有完全重建索​​引,因此,糟糕的统计信息可能是由于产生的非常高的索引碎片所致。我认为我需要将SQL Server维护周期添加到我的负载测试中,以更好地了解真实系统在长时间内的性能。 2012年1月10日更新: 要考虑的另一个因素。SQL Server 2005中添加了两个跟踪标志(2008年似乎仍然存在),以解决与过时和/或误导性统计信息的发生有关的特定缺陷。有问题的标志是: DBCC TRACEON(2389) DBCC TRACEON(2390) MSDN:Ian Jose的WebLog:升序键和升序列上的自动快速更正统计信息 统计信息,Fabiano Amorim 当然,在决定启用这些标志时应该非常小心,因为它们可能会产生不利影响。

2
MySQL 5.1 InnoDB配置/ 24GB RAM-双至强高负载
我正在运行一个Facebook应用程序,该应用程序目前有300-600个并发用户(并且还在不断增长)。为了使硬件为增长做好准备,我将i7 / 12gb ram / 2x 80g intel x25 ssd(debian 5.0 / mysql 5.0 / 64bit)更改为bi-xeon / 24gb ram / 2x 120gb intel 320 ssd(ubuntu 10.10 / mysql 5.1 / 64位)。 现在我面临的问题是,性能要比“小盒子”差。在两台服务器上,我一直在使用nginx / php fcgi来提供内容。 我只使用innodb,读/写大约65%/ 35%。大约800-1000 qps,但是所有查询都很简单,永远不会加入超过1个额外的表。所有索引均已设置,并且慢速日志(> 2s)中不会记录任何查询。目前,我大约有400mb的数据(带索引的数据约为1gb),期望它每月增加一倍。 我很喜欢每个可以给我一个提示的人,告诉他们应该进行哪些更改以使其运行更加流畅。 i7机顶盒上的旧配置是这样的(混合myisam / innodb),最多可容纳800多个用户。 旧的my.cnf key_buffer = 3000M max_allowed_packet = 128M …

4
优化大表上的联接
我试图从正在访问具有约2.5亿条记录的表的查询中获得更多性能。从我对实际(未估计)执行计划的阅读中,第一个瓶颈是如下查询: select b.stuff, a.added, a.value from dbo.hugetable a inner join #smalltable b on a.fk = b.pk where a.added between @start and @end; 有关所涉及的表和索引的定义,请参见下文。 执行计划表明在#smalltable上使用了一个嵌套循环,并且对largetable的索引扫描已执行480次(对于#smalltable中的每一行)。这对我来说似乎是倒退的,因此我尝试强制使用合并联接: select b.stuff, a.added, a.value from dbo.hugetable a with(index = ix_hugetable) inner merge join #smalltable b with(index(1)) on a.fk = b.pk where a.added between @start and @end; …

1
将数据加载到临时表中时获得最少的日志记录
即使在阅读了《数据加载性能指南》之后,我仍然不确定是否有必要将TABLOCK表提示添加到一个空的临时表中,该临时表由一个聚集索引定义,以便获得最少的日志记录。 显然,临时表是在TempDB中创建的,该表以SIMPLE恢复模式运行,因此我本以为它是最小化日志记录的理想选择,但是我找不到找到该表的方法。 临时表是否可以作为最少日志记录的候选表?如果这样,是否值得为永久表推荐添加TABLOCK提示?

1
MySql Server性能下降-什么以及如何检查?
开始:免责声明 我不是MySql Server DBA;我最了解MSSQL-这就是为什么我需要您的帮助。 结束:免责声明 我被要求检查为什么MySql服务器引擎的性能不佳-我没有看到也没有保存所涉及的数据库,并且想知道从哪里开始。 我从哪里开始? 我应该问哪些问题来访问MySql的人员-我什至不知道他们是否使用phpmyadmin或其他工具。 实质上: 我需要什么物品,我将如何回应每件物品? 问题出在数据库性能上时,有哪些关键要求? 在MSSQL中,我可以检查sp_who2现有连接以查看是否有阻塞,mysql中的对应对象是什么?*不必太具体,因为每个项目可能有多种结果,但是由于它影响用户,因此希望帮助解决问题-显然他们在没有dba的情况下设置了mysql引擎。

2
截断/大插入后是否应该重建索引?
我有一个存储过程,它会在插入新数据(基于其他表中的数据,计算等)之前,截断每个表中各有约175万行的某些表。 基本轮廓非常简单: 截断表 在大约75,000的“批次”中插入175万行。 我想知道是否应该在此过程中的任何时候显式重建索引?例如 截断表 ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西] 插入175万行 也许 ALTER INDEX ALL ON xxx DISABLE 截断表 插入175万行 ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西] 非常感谢任何帮助...不是DBA-知道DB很好的开发人员会更准确!

1
向大表添加串行列的最有效方法
将BIGSERIAL列添加到巨大的表(〜3个Bil。行,〜174Gb)中,最快的方法是什么? 编辑: 我希望该列为现有行(NOT NULL)的增量值。 我没有设置填充因子(回想起来,这似乎是一个错误的决定)。 我的磁盘空间没有问题,只是希望它尽可能快。


2
SQL Server 2016高空闲CPU和查询速度极慢
我安装了大约10天的WinServer2012R2和SQL Server Express 2016进行测试。我是这台机器上的唯一用户。从SQL Server 2005还原的.bak数据库约为250MB,不会出现任何问题。重新启动计算机后,进程“ SQL Server NT-64位”使用0%CPU。 在几分钟或几小时后,通过“ SQL Server NT-64位”的SSMS CPU使用情况进行的一些简单查询(无更新/插入!)突然跳到〜15%并保持在那里,即使处于空闲状态也是如此。从那时起,通常不到一秒钟的查询突然需要2分钟。在实际查询期间,CPU使用率不会增加。在这种状态下,服务器实际上变得不可用。 仅连接SQL Server Profiler会花费30秒以上的时间。除了我自己的查询外,我只看到很少的来自SQLServerCEIP / SQLTELEMETRY的查询,每分钟约3个。 重新启动SQL Server无法解决它。CPU使用率跃升至约15%。即使数小时后,SQL Server也无法恢复。仅重新引导整个计算机即可解决此问题。 由于这是“开箱即用”的安装,因此只有一个小的数据库,几乎没有查询,只有我作为用户,并且可能没有锁,许多有关常规SQL-Server性能问题的文章都谈到了很多不希望做的事情。在这里真的不适用。似乎SQL Server 仅希望专注于某些内部任务。 这是一个具有2GB RAM和2GHz双Xeon的虚拟机。我也有VS2016,而且速度非常快。没有防病毒软件,甚至没有Windows Defender。在这里已经晚了。我明天将尝试sp_whoisactive。我真的很想知道SQL-Server在那里做什么...在具有1 GB的以前的机器上,相同的数据库在SQLServer2005下运行了10年没有问题... 我不是SQL-Profiler专家。我应该从哪里开始寻找?

1
我应该对链接SQL Server有什么大的限制?
我们的产品基于Microsoft SQL Server。当前,我们正在使用三个数据库,并且始终将它们部署在一个SQL Server实例上。 这三个数据库是OLTP,OLAP和审计。OLAP数据库使用跨数据库查询,具有来自OLTP和审计的有关EOD的大量入站数据。 问题 如果我们要将这三个数据库部署到单个物理服务器内的三个单独的Standard Edition 实例上,并使用SQL Server的链接服务器功能将它们绑定在一起: 对应用程序代码的透明度如何?我应该期待多少变化? 到OLAP的入站数据总计为5万至10万行,每个EOD负载为200-500MB。我应该期望多少性能下降? 我还应该期待其他哪些重大限制? 背景 目前,我们正在为潜在的第一个客户提供500多个并发用户。 我们正在起草服务器规范,其中包括64个内核和256GB RAM。为了使SQL Server能够利用所有这些丰富的资源,客户端必须购买Enterprise Edition,而对于SQL Server 2016,Enterprise Edition仅在基于每核的许可中可用。 我们担心光是许可成本(64 x 7400美元)就会使他们失望。因此,我正在考虑将数据库分为Standard Edition的三个实例,并将它们链接在一起,希望链接功能对应用程序代码是透明的。

2
为什么在SQL执行计划中执行TOP操作
经过一会儿的搜索后,我决定发布此问题,因为它找不到答案,并向您道歉,如果那里没有类似的问题/答案。 在两个类似设置的SQL服务器上运行下面的查询时,我们会遇到不同的执行计划,这会影响性能,我们需要帮助找出原因。 查询: SELECT process_id INTO #temp FROM revrep_revenue_fact WHERE process_id = 284 DROP TABLE #temp 服务器A的执行计划 服务器B的执行计划 服务器B http://s2.postimg.org/z9fjrfv4n/server_B.png 您会注意到,服务器B在实际执行计划中具有TOP物理操作,我们正在尝试找出原因。两个查询在索引查找中使用相同的索引。 这是服务器A和服务器B的一些详细信息 服务器A和B都 Windows Server 2008 R2标准Service Pack 1 24GB RAM 64位操作系统 使用(SELECT SERVERPROPERTY('ProductVersion'))获得的SQL Server 2012版本 服务器A SQL版本11.0.3000.0 服务器B SQL版本11.0.5058.0 我们尝试过的 清除过程缓存 重建索引 刷新统计 设置行数0 为什么服务器B在执行计划中有TOP?在这个简单的查询示例中,没有实际问题,但是在较大的查询中,TOP的成本增加了,我们发现性能受到了影响。我们将不胜感激调试任何帮助,我们将为您提供可能需要帮助的任何其他信息。

2
查找整数序列包含给定子序列的行
问题 注意:我指的是数学序列,而不是PostgreSQL的序列机制。 我有一张表,代表整数序列。定义是: CREATE TABLE sequences ( id serial NOT NULL, title character varying(255) NOT NULL, date date NOT NULL, sequence integer[] NOT NULL, CONSTRAINT "PRIM_KEY_SEQUENCES" PRIMARY KEY (id) ); 我的目标是使用给定的子序列查找行。也就是说,其中sequence字段是包含给定子序列的序列的行(在我的情况下,该序列是有序的)。 例 假设该表包含以下数据: +----+-------+------------+-------------------------------+ | id | title | date | sequence | +----+-------+------------+-------------------------------+ | 1 | BG703 | 2004-12-24 …

2
在Postgres中拥有成千上万的用户可行吗?
我们正在创建SAAS,最多将有50.000个客户。我们正在考虑在Postgres数据库中为每个客户创建一个用户。我们将每个登录我们服务的用户映射到数据库中的一个用户,以确保他们只能访问自己的数据。我们还希望通过此解决方案在触发器中直接在数据库中实现审计跟踪。如果每个客户都有自己的数据库用户,那么即使两个客户共享相同的数据,也很容易看到谁做了什么。 因为我们的数据库中有50.000个用户,我们是否会遇到一些意外问题?绩效方面或管理方面。也许连接池会更困难,但是我真的不知道我们是否需要它。

1
T-SQL-选项(FAST x)和跟踪标志8722
我已经搜索了很长时间,但仍然找不到我的问题的答案。 我们的Dynamics AX生成带有查询提示OPTION(FAST x)的查询,有时会强制使用错误的执行计划。开发人员说这是默认设置,很难更改(可能会固定在所有表格上)。 因此,我正在寻找一种使用跟踪标志覆盖这些提示的方法。我发现了可爱的跟踪标志8722,据称它使SQL Server忽略了某些查询提示,尤其是OPTION子句中的那些。 但是,这对我来说不起作用。我也尝试启用跟踪标志8602(禁用索引提示),但我的查询仍在使用FAST x提示运行(这比我实际删除OPTION子句时要慢得多)。 我也尝试清除计划缓存,但无济于事。 有任何想法吗?我有什么想念的吗? PS我全局启用了跟踪标志,这是SQL Server 2012 Developer版本

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.