Questions tagged «performance»

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

3
InnoDB导入性能
我在批量导入一个由大约1000万行(或7GB)组成的相当大的InnoDB表时遇到了麻烦(对我来说,这是迄今为止我使用过的最大表)。 我做了一些研究来提高Inno的导入速度,目前我的设置如下所示: /etc/mysql/my.cnf/ [...] innodb_buffer_pool_size = 7446915072 # ~90% of memory innodb_read_io_threads = 64 innodb_write_io_threads = 64 innodb_io_capacity = 5000 innodb_thread_concurrency=0 innodb_doublewrite = 0 innodb_log_file_size = 1G log-bin = "" innodb_autoinc_lock_mode = 2 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit=2 innodb_buffer_pool_instances=8 import is done via bash script, here is the mysql code: SET …

1
哈希/排序溢出到tempdb中的频率是多少?
我们的企业应用程序使用SQL Server进行数据存储,并且主要是OLTP系统。但是,我们应用程序的重要组成部分会产生大量的OLAP工作负载。 我们对tempdb的写入延迟约为100毫秒。这种趋势发展随着时间的推移,和ALLOW_SNAPSHOT_ISOLATION关断。我们正在对有关此问题的问题进行故障排除,到目前为止,我们发现的唯一有趣的事情是,有大量散列和排序溢出到tempdb。我们推测这是来自我们的OLAP工作负载。 题 涉及什么频率的泄漏?任何?每秒多少溢出?我们的初步数据表明,每秒大约有2次哈希溢出,每分钟大约25次分类溢出。 这种溢出的频率是否可能成为我们高tempdb写延迟的主要原因? 其他资讯 根据内核数的建议,我们正在为tempdb使用多个文件。tempdb文件位于RAID 1 + 0 SAN(具有高性能SSD)上,但与主DB数据和日志文件位于同一设备上。tempdb文件的大小足够大,以至于它们很少增长。我们没有使用跟踪标志1117或1118。另一个变量是,此设置被许多不同的数据库共享,这些数据库都承受着中到高负载。 我们的100 ms写延迟远远大于我们在MSDN,SQL Skills和其他站点上找到的tempdb写延迟可接受的范围。但是,其他数据库的写入延迟很好(小于10ms)。基于其他统计数据,看来我们在大量使用tempdb,尤其是对于内部对象。因此,我们正在深入研究以找出为什么我们的应用程序如此大量地使用内部对象。 我们的平台上确实存在实际性能问题,这些问题以不同的方式体现出来。我们一直在监视性能计数器,查看DM视图,并分析我们的应用程序行为,以尝试挖掘系统的资源使用特征。我们现在专注于溢出,因为我们已经了解到溢出具有严重的负面影响,因为它们是在磁盘上而不是在内存中执行的。而且我们似乎有大量的泄漏事件,但是我想就人们认为“高泄漏”的问题征求一些意见。

1
用于处理10亿行和计数的数据库设计
我们以大约5000 pr的速率接收实时GPS数据。分钟(来自4个TCP服务器)。每个服务器使用单个连接来插入数据,并在两次插入之间缓冲数据。每隔15分钟左右,服务就会获取一次此数据,并将其处理为行程。生成行程后,仅当用户希望在地图上查看路线时,实际的GPS数据通常并不那么重要。 问题是数据库似乎在努力跟上插入数据的速度。有时,当负载增加时,插入时间突然急剧增加(> 30秒),这又使更多数据得以缓冲,从而导致更大的插入量和更长的插入时间。 我希望能对当前的设计发表一些评论,以及一些我们必须提高性能的想法,并回答我们的一些问题-以及人们可能拥有的其他技巧! 当前设计 当前将数据分为代表一周的表格,并且将早于一年的数据存档到辅助数据库中。整个事物在可编辑视图中连接在一起,该视图用于插入和读取。 桌子设计 ID(PK,唯一标识符) DeviceId(FK,int) PersonId(FK,int) VehicleId(FK,int) TokenId(FK,int) UtcTime(PK,datetime2(3)) 纬度(浮动) 经度(浮点) 速度(smallint) 标题(smallint) 卫星(tinyint) IOData(varbinary(100)) IgnitionState(tinyint) UserInput(tinyint) CreateTimeUtc(datetime2(3)) 指标 DeviceId_CreateTimeUtc_Desc DeviceId_UtcTime_Desc(集群) PersonId_UtcTime_Desc TokenId_UtcTime_Desc VehicleId_UtcTime_Desc 当前每个星期(包括索引)占用大约10 GB的数据,并且主数据库中目前大约有300 GB的数据。 主数据库中的数据表具有自己的文件组,其中包含1个文件,但它与主数据库中的所有其他表位于同一磁盘上。辅助数据库位于不同的磁盘上,但位于同一台计算机上。 我认为,当使用新的表分区(一周)时,我们每周还会运行一次索引重建作业。不执行收缩。 该计算机是具有12 GB内存的8核HP,并且包含主数据库的磁盘正在运行RAID 10。 主意 将存储在主数据库中的数据量限制为最多1个月。至少它可以使数据库更易于管理以进行备份/还原,但是通过这样做,我们可以期望看到性能的提高吗? 在文件组中为当前数据创建2个文件,并将它们分发到2个不同的物理分区中 创建保存当前数据的主从数据库,因此在不同数据库上执行插入和读取操作 将当前数据文件放在SSD磁盘上(镜像是否会对SSD磁盘产生任何性能差异?) 请让我知道是否需要更多信息。影响性能的因素很多,并且可能有许多调整方法。

2
如何正确监视PostgreSQL数据库连接数?
我试图使用Nagios脚本来监视Postgres数据库上的数据库连接数,但我遇到了这个问题:这些计数被视为当前打开的连接,每5分钟测量一次。 SELECT sum(numbackends) FROM pg_stat_database; 不过,这似乎会错过大量的短期连接,因此统计数据与实际情况相去甚远。 我尝试手动运行该脚本,并且发现即使在两个连接之间相差几秒钟的情况下,也发生了很大的变化。 我如何以可靠的方式获取此信息?像max(connectios)发生在一个时间间隔内。

1
550万行/文档的MongoDB性能与PostgreSQL的对比
有人可以帮我比较这些查询,并解释为什么PostgreSQL查询在不到2000毫秒的时间内执行,而MongoDB聚合查询需要近9000毫秒,有时甚至高达130K毫秒? PostgreSQL 9.3.2 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit PostgreSQL查询 SELECT locomotive_id, SUM(date_trunc('second', datetime) - date_trunc('second', prevDatetime)) AS utilization_time FROM bpkdmp WHERE datetime >= '2013-7-26 00:00:00.0000' AND datetime <= '2013-7-26 23:59:59.9999' GROUP BY locomotive_id order by locomotive_id MongoDB查询 db.bpkdmp.aggregate([ …

2
何时更改并行性的成本阈值
在检查性能问题时,我发现大量涌入的CXPACKETS暗示我可能需要研究并行度的成本阈值,也许还需要考虑MAXDOP。 在对MAXDOP进行任何重大更改之前,我已经遵循许多其他人的建议,包括@mrdenny在SQL Server 2008的CXPACKET Waits性能调整中的建议以及@ aron-Bertrand在处理CXPACKET等待中的答案-设置成本阈值用于并行性。我已添加维护,以每晚更新一次完整的统计信息。这感觉就像是明智之举。 但是,修改成本阈值仍然让我感到困惑。 在什么时候应该更改并行性的成本阈值?是否有人举了一个例子(在检查了查询和工作负载的成本之后)他们对该成本进行了更改? 抱歉,是否已在上一个问题中得到了解答。 谢谢!

3
链接服务器风险
我正在实现一项新功能,该功能需要来自多台服务器上数据库的数据。我只需要合并所有这些服务器中的数据并对其进行排序。我想到的两个选择是: 使用链接的服务器并编写一个简单的查询,以对将在一台服务器上运行的数据进行合并和排序,并从另一台服务器收集数据。 使用应用程序从所有服务器收集数据,然后将其发送回SQL Server进行排序(不想在应用程序中实现排序)。 我们在SQL Server 2008 r2的活动/活动群集中运行服务器。所有数据库都具有相同的权限,如果您有权访问一个数据库/服务器,则对它们全部都具有权限。这是一个面向公众的应用程序(需要用户登录)。 使用链接服务器有哪些风险?我应该关注任何安全漏洞吗?在主动/主动群集中运行链接服务器是否有任何问题?与替代方案相比,会不会有任何重大的性能问题? 关于链接服务器,似乎普遍存在负面的“嗡嗡声”,但是我找不到任何具体的东西可以使我相信那里确实存在任何问题。

1
MySQL表创建异常缓慢
在我的一个MySQL数据库上创建一个简单的表需要花费很多时间: mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); Query OK, 0 rows affected (16.58 sec) 机器很空闲: 01:21:26 PM CPU %user %nice %system %iowait %steal %idle 01:21:27 PM all 0.50 0.00 0.21 0.00 0.00 99.29 任何想法如何对此进行调查? 编辑:按照DTest的建议,这是执行配置文件: mysql> SHOW PROFILE FOR QUERY 1; +----------------------+----------+ | Status | …

2
如何配置MySQL Innodb每小时处理1000次插入?
我的网站访问量很高,每小时可能会插入数千条新记录。 这个错误使网站瘫痪: PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 ) 如果MySQL无法处理这种类型的负载,我将感到非常惊讶。那么,我的问题是,这是数据库问题吗?如何配置MySQL以处理这么大的流量? …

1
MySQL分区:在分区数量和每个分区的大小之间是否存在性能折衷?
我有一张大表(几亿行),我想对其进行有效的分区。我的问题是分区大小和分区数量之间是否需要权衡。据我了解,对分区中使用的列的大多数查询都将更快,因为该查询(对于大多数查询)仅需要在适用于该查询的分区中进行搜索。因此,为了最大程度地提高效率,应该将一个大表划分为最大数量的分区,从而使每个分区尽可能小。对于MySQL,这意味着1024个分区。但是拥有大量分区是否存在性能缺陷?是的,如何找到最佳的分区数? 注意:关于stackoverflow已经有一个类似的问题,但是只有一个答案(从我的角度来看)未达到要求。所以我将以自己的方式陈述这个问题...希望更清楚

4
如何在具有16 GB RAM的QuadCore机器上充分利用MySQL?
我正在工作站上运行MySQL 5.5服务器以进行科学数据分析,并想知道如何配置MySQL以便从性能方面获得最大收益。我通常运行的查询类型涉及10-20个表的联接,并且可以运行很长时间,一到几分钟也不例外。只有极少数用户同时访问数据库(最多5个用户)。我将服务器从具有2.2 GHz双核和4 GB RAM的Lenovo Thinkpad T61移到了以下具有手动选择组件的全新机器上: Intel i7 3770,4x 3.4 GHz(以4x3.7 GHz运行) Z77芯片组 16 GB DDR3 1600 RAM Windows 7 Prof 64位 Windows和MySQL服务器在Intel 520系列SSD驱动器上运行。 首次测试(在两台计算机上运行相同的查询)显示了新测试的速度有了明显的提高,但是查询仍然需要很多时间,我期望会有更多的提升。所讨论的查询已得到很好的优化,即所有表都具有适当的键,这些键也从“解释扩展”开始使用。 现在回到我当前的MySQL设置:首先,我应该提到很久以前我从MyISAM迁移到Innodb。 我的my.ini进行了一些调整(即偏离默认设置): # Maximum size for internal (in-memory) temporary tables. If a table # grows larger than this value, it is automatically converted to …

2
防止查询等待表级锁定的方法
将客户的数据库移至其他服务器后,我们遇到了问题。这应该会对站点的性能产生积极影响,但是MyISAM中的表锁定存在问题。(我听说过使用InnoDB代替MyISAM,但是我们不能在不久的将来更改引擎)。 我们可以将其发现为更新查询,该更新查询是由主持人在文章站点上激活评论时执行的。这是过程: 更新查询已处理 SET status = 1 WHERE id = 5(已设置索引) 页面的缓存文件被删除 此时,整个页面变慢。数据库本身忙了几分钟。我几次获取进程列表,并看到了大约60个不同选择查询的条目,它们都处于等待表级锁定的状态。 1.我不理解为什么表上的此更新article_comments会影响表article等待表级锁定的选择语句。在进程列表中,几乎所有等待查询都来自该表。我已经读过一个事实,即更新/插入优先于选择,并且这可能会导致此类问题,但是当注释被激活时,articles-table本身不会被更新,因此选择不应该等待。我错过了吗? 2.除了更改为InnoDB以外,还可以采取其他措施来防止此行为或至少获得更好的平衡吗?对于将数据库移动到新服务器之前没有出现此问题,我感到非常恼火。我猜有一些配置错误,但我不知道如何识别。

3
如何提高MS SQL Server中原始查询的性能?
我有一个ASP.NET网站,它拥有自己的独立数据缓存,并且数据不会长时间更改,因此它不需要使用相同的查询第二次查询SQL Server。我需要提高转到该SQL Server的首次(原始)查询的性能。一些查询处理的数据太多,可能导致SQL Server使用tempdb。我不使用临时表变量或临时表,因此SQL Server决定tempdb在需要时自行使用。 我的数据库大小为16Gb,服务器计算机上有32Gb的物理RAM。 我了解MS SQL Server缓存策略会尝试将数据保留在RAM中,以加快类似查询的性能(如果它们需要再次加载相同的数据)。除此之外,它将尝试使用可用的RAM代替tempdb来提高性能,而不会引起磁盘访问。 我想当需要在tempdb SQL Server中存储一些内容的查询出现并且没有足够的RAM可用时,SQL Server有2个选择: 1)卸载一些缓存的数据并使用备用的RAM代替tempdb以避免磁盘写入 2)保留缓存的数据以备将来查询,并开始使用tempdb,这会导致写入慢速磁盘。 我不知道在这种情况下SQL Server会做出什么选择,但我希望它成为选择#1,因为我只关心首次查询(原始)的性能,因为我再也不会向SQL Server发送相同的查询了。 (尽管我可能会发送类似的查询)。 在这种情况下,SQL Server缓存策略是什么? 在避免针对原始查询的tempdb和第二次查询的速度之间,如何平衡RAM的使用? 是否可以以选择#1的方式配置SQL Server?如果是,那怎么办? 我还能如何提高所有原始SQL查询的性能? 由于我不了解SQL Server缓存策略,因此我想将数据库放在RAM磁盘上。这将确保即使SQL Server始终选择#1,任何原始查询都可以高速加载未缓存的数据。这样做的风险是,如果SQL Server继续选择#2,则可能会开始使用更多具有较少可用RAM的tempdb(在我将16Gb用于RAM磁盘后仅剩下16Gb),这将减慢那些导致溢出的原始查询的速度tempdb。 我对SQL 2008 R2的解决方案感兴趣,但是我想对于SQL 2008,SQL 2005可能是相同的,并且可能是SQL 2000。 说明: 该框上没有其他应用程序在运行,它专用于SQL Server。网站在单独的框中运行。 它是Windows Server 2008 R2 Enterprise 64位上的SQL Server 2008 R2 Standard Edition 64位。 …

2
是否可以通过SQL Server 2008强制索引保留在内存中?
我有一个包含几百万行的表,我需要不时地从中运行一些查询。第一次查询通常会很慢(大约10s),而后续查询通常会更快(大约1s)。几个小时后,缓慢/快速循环又开始了。 我已经在执行计划中检查了所有需要的索引均已存在并已正确使用,并且我认为性能差异是由于该索引实际上位于后续查询的内存中(我是对的,还是其他?可能的原因?) 我还使用索引来运行许多其他查询,但是这些查询耗时较少,其性能也不太关键,因此我担心那些索引实际上会将关键索引从内存缓存中推出。 除了明显的“添加更多RAM”修复程序之外,我还一直在考虑编写脚本脚本以每小时运行一次以将索引强制返回内存。 有没有更优雅的方法可以做到这一点?就像一种提示SQLServer的方法一样,如果它只有足够的内存来保持单个索引的高速缓存,那它应该是那个? 我知道通常最好的办法是不要将SQLServer与这类事情搞混,但是我查询的异常性质(运行很少,但是时间紧迫)使我相信这样做(如果可能) 。 我也很好奇,是否有办法知道给定时间在内存中缓存了哪些索引?


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.