Questions tagged «performance»

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

3
如何通过更新(软件和硬件)为重I / O优化数据库
这种情况 我有一个PostgreSQL 9.2数据库,它一直在大量更新。因此,该系统受I / O限制,我目前正在考虑进行另一次升级,我只需要一些有关从何开始改进的指导。 这是过去三个月情况的图片: 如您所见,更新操作占据了大多数磁盘利用率。这是在更详细的3小时窗口中情况的另一幅图片: 如您所见,峰值写入速率约为20MB / s 软件 服务器正在运行ubuntu 12.04和postgresql 9.2。更新类型通常是在ID标识的各个行上进行小更新。例如UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。我已经尽可能地删除和优化了索引,并且服务器配置(Linux内核和postgres conf)也都进行了优化。 硬件 硬件是一台专用服务器,在RAID 10阵列中具有32GB ECC ram,4个600GB 15.000 rpm SAS磁盘,由带BBU的LSI RAID控制器和Intel Xeon E3-1245 Quadcore处理器控制。 问题 对于这种口径的系统(读/写),图表显示的性能是否合理? 因此,我应该集中精力进行硬件升级还是对软件进行更深入的研究(内核调整,conf,查询等)? 如果进行硬件升级,磁盘数量是性能的关键吗? ------------------------------更新------------------- ---------------- 我现在已经用四个Intel 520 SSD而不是旧的15k SAS磁盘升级了我的数据库服务器。我正在使用相同的RAID控制器。事情已经大大改善了,从下面的内容可以看出,I / O的峰值性能提高了6到10倍左右-太好了! 但是,根据答案和新SSD的I …

2
SQL编译对SQL Server的性能有多严重的影响?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我正在分析一个SQL Server 2005实例,通过PerfMon的SQLServer:SQL Statistics - SQL Compilations/sec指标,我发现平均值约为170左右。 我剔除了SQL事件探查器,并寻找SP:Compile或SQL:Compile事件。显然它们不存在。我没有找到Stored Procedure/SP:Recompile和TSQL/SQL:StmtRecompile事件。我在探查器中看到的数据量表明这些是看错的事件,尽管我不确定。 所以我的问题。任何一个答案都是不错的。 如何查看SQL Server中正在编译的内容? 我选择了错误的指标来查看吗?在Perfmon还是SQL Profiler中? 关于Stored Procedure/SP:Recompile和TSQL/SQL:StmtRecompileSQL事件探查器中的事件...它们不包括“持续时间”度量标准。如果无法提供查看事件对系统的影响的方法,那么如何评估这些事件对系统的影响。

2
为什么DELETE对性能有持续的影响?
最后是一个测试脚本,用于比较@table变量和#temp表之间的性能。我认为我已正确设置-性能计时已从外部获取在DELETE / TRUNCATE命令进行的。我得到的结果如下(以毫秒为单位)。 @Table Variable #Temp (delete) #Temp (truncate) --------------- -------------- ---------------- 5723 5180 5506 15636 14746 7800 14506 14300 5583 14030 15460 5386 16706 16186 5360 只是为了确保我理智,这表明CURRENT_TIMESTAMP(aka GetDate())是在语句时而不是批处理时使用的,因此TRUNCATE / DELETE与SET @StartTime = CURRENT_TIMESTAMP语句之间不应存在任何交互。 select current_timestamp waitfor delay '00:00:04' select current_timestamp ----------------------- 2012-10-21 11:29:20.290 ----------------------- 2012-10-21 11:29:24.290 当使用DELETE清除表时,在第一次运行和随后的运行之间的跳转中,这是非常一致的。我对DELETE的了解缺少什么?我已经重复了很多次,交换了命令,调整了tempdb的大小,使其不需要增长等。 CREATE TABLE …

2
索引与分区
为什么不能仅通过索引来实现性能改进,所以其他技术(如表分区)变得必要吗?这个问题仅与性能有关,当然可以将不同的分区放入不同的表空间中,这还会产生其他索引无法实现的效果。 或者换句话说,仅在性能方面是明智的:索引是否可以实现与表分区相同的性能改进?

2
如何创建索引以加快对表达式的聚合LIKE查询?
我可能在标题中提出了错误的问题。这是事实: 我的客户服务人员一直抱怨在基于Django的站点的管理界面上进行客户查找时响应速度慢。 我们正在使用Postgres 8.4.6。我开始记录慢速查询,并发现了这个罪魁祸首: SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%') 此查询最多需要32秒才能运行。这是EXPLAIN提供的查询计划: QUERY PLAN Aggregate (cost=205171.71..205171.72 rows=1 width=0) -> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0) Filter: (upper((email)::text) ~~ '%DEYK%'::text) 因为这是由Django ORM从Django Admin应用程序生成的Django QuerySet中生成的查询,所以我对该查询本身没有任何控制权。索引似乎是合理的解决方案。我尝试创建索引来加快速度,但是并没有什么不同: CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text)) 我究竟做错了什么?如何加快查询速度?


2
LOB_DATA,慢速表扫描和一些I / O问题
我有一个相当大的表,其中一列是XML数据,XML条目的平均大小约为15 KB。所有其他列都是常规int,bigints,GUID等。要获得一些具体数字,我们假设该表有100万行,大小约为15 GB。 我注意到的是,如果我要选择所有列,则从此表选择数据的速度确实很慢。当我做 SELECT TOP 1000 * FROM TABLE 从磁盘读取数据大约需要20-25秒-即使我没有对结果施加任何顺序。我使用冷缓存(即之后DBCC DROPCLEANBUFFERS)运行查询。以下是IO统计信息: 扫描计数1,逻辑读取364,物理读取24,预读7191,lob逻辑读7924,lob物理读1690,lob预读3968。 它捕获约15 MB的数据。执行计划按预期显示了聚集索引扫描。 除了查询外,磁盘上没有任何IO。我还检查了聚簇索引碎片是否接近0%。这是消费级的SATA驱动器,但是我仍然认为SQL Server能够以超过100-150 MB / min的速度扫描表。 XML字段的存在会导致大多数表数据位于LOB_DATA页上(实际上,约90%的表页都是LOB_DATA)。 我想我的问题是-我是否正确地认为LOB_DATA页会导致缓慢的扫描,不仅是因为它们的大小,还因为当表中有很多LOB_DATA页时,SQL Server无法有效地扫描聚集索引吗? 更广泛地讲-具有这样的表结构/数据模式是否合理?使用Filestream的建议通常会指出更大的字段大小,所以我真的不想走那条路。我还没有真正找到有关此特定情况的任何好信息。 我一直在考虑XML压缩,但是它需要在客户端或SQLCLR上完成,并且需要在系统中进行大量工作。 我尝试了压缩,并且由于XML是高度冗余的,因此我可以(在ac#应用程序中)将XML从20KB压缩到〜2.5KB并将其存储在VARBINARY列中,从而避免使用LOB数据页。在我的测试中,SELECT的速度提高了20倍。

3
如何最好地衡量查询性能?
我有2个存储过程,其中第二个存储过程是第一个存储过程的改进。 我正在尝试确切地衡量这是多少改进。 1 /测量clock time似乎不是一种选择,因为我得到不同的执行时间。更糟糕的是,有时(很少,但确实会发生)第二个存储过程的执行时间大于第一个存储过程的执行时间(我想是由于当时服务器的工作量)。 2 / Include client statistics也提供不同的结果。 3 / DBCC DROPCLEANBUFFERS,DBCC FREEPROCCACHE是不错的,但同样的故事... 4 / SET STATISTICS IO ON可能是一种选择,但是由于我的存储过程中涉及许多表,我如何获得总体得分? 5 / Include actual execution plan也可以选择。estimated subtreecost对于第一个存储过程,我得到0.3253,对于第二个存储过程,我得到0.3079。我可以说第二个存储过程快了6%(= 0.3253 / 0.3079)吗? 6 /是否使用SQL Server Profiler中的“读取”字段? 那么,无论执行条件如何(服务器的工作负载,执行这些存储过程的服务器等),我怎么能说第二个存储过程比第一个过程快x%? 如果不可能,如何证明第二个存储过程比第一个存储过程有更好的执行时间?

5
SQL:如果不是CPU或IO,什么会减慢INSERT的速度?
我们拥有大量写产品的数据库。我们刚刚购买了带有SSD的新服务器,以提供帮助。令我们惊讶的是,插入速度并不比存储速度慢得多的旧机器快。在基准测试期间,我们注意到SQL Server进程显示的IO速率非常低。 例如,我运行了在此页面上找到的脚本,除了我在循环周围添加了BEGIN TRAN和COMMIT之外。充其量我可以看到磁盘使用率达到7Mb / s,而CPU几乎没有达到5%。该服务器已安装64Gb并正在使用10。总运行时间为首次呼叫2分钟15秒,而后续呼叫大约1分钟。数据库正在简单恢复中,并且在测试期间处于空闲状态。我在每次通话之间都放了桌子。 为什么这么简单的脚本这么慢?几乎根本不使用硬件。专用的磁盘基准测试工具和SQLIO均表明SSD可以正常运行,并且读写速度高达500Mb / s。我知道随机写入比顺序写入要慢,但是我希望像这样的简单插入到没有聚簇索引的表中会更快。 最终,我们的情况要复杂得多,但是我觉得我需要先了解一个简单的案例。简而言之,我们的应用程序删除旧数据,然后使用SqlBulkCopy将新数据复制到临时表中,执行一些过滤,最后根据情况使用MERGE和/或INSERT INTO将数据复制到最终表中。 ->编辑1:我遵循了马丁·史密斯(Martin Smith)链接的过程,得到以下结果: [Wait Type] [Wait Count] [Total Wait (ms)] [T. Resource Wait (ms)] [T. Signal Wait (ms)] NETWORK_IO 5008 46735 46587 148 LOGBUFFER 901 5994 5977 17 PAGELATCH_UP 40 866 865 1 SOS_SCHEDULER_YIELD 53279 219 121 98 WRITELOG 5 …

3
通常“ WHERE 1 = 1”会影响查询性能吗?
我最近看到了一个问题“ where 1 = 1 statement”;我在构造动态SQL时经常使用的SQL构造,目的是编写更简洁的代码(从宿主语言的角度来看)。 一般来说,对SQL语句的这种添加是否会对查询性能产生负面影响?我不是在寻找有关特定数据库系统的答案(因为我已经在DB2,SQL Server,MS-Access和mysql中使用了它),除非没有具体说明就不可能回答。

9
在标准版上监视Oracle数据库性能的工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 2年前关闭。 这是我在寻找的东西: 适用于标准版,即没有诊断包。 提供当前和历史绩效数据。 良好的视觉效果,可轻松发现趋势并将其呈现给管理层。 如果您使用过该工具,那么我会对您发现的优缺点感兴趣。我可以拿出一个清单,但是实际使用该工具的见解要有价值得多。

4
使用ORM时,在数据库设计中需要注意哪些事项
当您知道使用对象关系映射器(ORM)维基百科访问数据库时,需要注意哪些数据库设计陷阱?另请参阅实体框架NHibernate或LLBLGenPro。 作为示例,我将注意到SqlServer的RPC调用的2100参数限制。当使用LLBLgen和使用复合主键的联接表时,这是一个问题。有关复合键,请参见MSDN文章。
19 performance  orm 

4
带有Oracle的SSD
我们一直在研究将SSD与Oracle结合使用以加快测试迁移的速度。目前,迁移过程需要12到18个小时才能完成,具体取决于数据量(我们显然也在做很多性能调整)。我们有许多用于各种运行和分析的廉价linux机器。 戴尔直接提供的SSD成本过高。我想知道是否有人使用过消费级固态硬盘(例如Crucial / Micron)。 我意识到在Linux(使用Centos)上,TRIM支持将是一个问题。有没有人在Windows 7上使用它们来解决这个问题?

2
用plpgsql编写的函数调用的Postgres查询计划
它使用的时候可能pgadmin还是plsql获得查询计划的搁置了内部执行SQL语句ü SER d efined ˚F油膏(UDF)使用EXPLAIN。那么,如何掌握UDF特定调用的查询计划?我看到UDF F()在pgadmin中抽象为一个操作。 我看过文档,但找不到任何东西。 目前,我正在提取语句并手动运行它们。但这对于大型查询并不会减少它。 例如,考虑下面的UDF。此UDF即使具有打印其查询字符串的能力,也不能与复制粘贴一起使用,因为它具有在本地创建的临时表,在粘贴和执行该表时不存在该临时表。 CREATE OR REPLACE FUNCTION get_paginated_search_results( forum_id_ INTEGER, query_ CHARACTER VARYING, from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, in_categories_ INTEGER[] DEFAULT '{}') RETURNS SETOF post_result_entry AS $$ DECLARE join_string CHARACTER VARYING := ' '; from_where_date …

2
通过子查询选择多列
我正在尝试从以下查询中的子查询中选择2列,但无法这样做。尝试创建别名表,但仍然无法获取它们。 SELECT DISTINCT petid, userid, (SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate, (SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID FROM pet LEFT JOIN comments ON pet.id = comments.petid WHERE userid='ABC' AND deviceID!='ABC' AND comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH); 基本上,我试图从同一行中获取lastComDate&lastPosterID,该行是针对特定宠物的注释中的最新行。请提出如何有效地获取它们的建议。 上面的查询有效,但由于两次获取同一行而显得有些矫kill过正。而且,该ORDER BY子句比聚合函数要慢得多-正如我在分析查询时发现的那样。因此,避免排序的解决方案将不胜感激。

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.