Questions tagged «performance»

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

2
innodb_flush_method = O_DIRECT与O_DSYNC性能对具有LVM磁盘分区的ext3的影响
在我的一个生产环境中,我们有两个实例在RedHat集群上运行,并且一个生产实例与该集群相关联。 我们有125G主内存,instance1占用了24G InnoDB缓冲池,instance2占用了12G,这与RedHat集群无关。数据日志和事务日志都位于带有ext3文件系统的LVM磁盘分区上。 为了提高性能和提高I / O吞吐量,我决定更改innodb_flush_method为O_DIRECT。 参考MySQL文档: InnoDB数据和日志文件位于SAN上的位置,已发现将设置innodb_flush_method为O_DIRECT可以使简单SELECT语句的性能降低三倍。 提到高性能MySQL Ver 2和3,它指出InnoDB开发人员使用发现了错误innodb_flush_method=O_DSYNC。O_SYNC并且O_DSYNC类似于fsync()和fdatasync():O_SYNC同步数据和元数据,而O_DSYNC仅同步数据。 如果所有这些看起来都像是在没有任何建议的情况下进行很多解释,则以下是建议: 如果您使用类似Unix的操作系统,并且您的RAID控制器具有备用电池的写缓存,则建议您使用O_DIRECT。如果不是,则默认设置或O_DIRECT将是最佳选择,具体取决于您的应用程序。 谷歌搜索,我得到这个基准测试报告:在O_DSYNCVSO_DIRECT 基准报告: =================== 1B行复杂事务测试,64个线程 * SAN O_DIRECT:读/写请求:31560140(每秒8766.61个) * SAN O_DSYNC:读/写请求:5179457(每秒1438.52) * SAN fdatasync:读/写请求:9445774(每秒2623.66) *本地磁盘O_DIRECT:读/写请求:3258595(每秒905.06) *本地磁盘O_DSYNC:读/写请求:3494632(每秒970.65) *本地磁盘fdatasync:读/写请求:4223757(每秒1173.04。 但是,O_DIRECT禁用OS级别的缓存,可以禁用双重缓存,这会显示出更好的I / O吞吐量。 O_DIRECT而不是一起去O_DSYNC好吗?这两个选项有些令人困惑。哪个选项可以显示出更好的I / O吞吐量并增强性能,而不会对数据,读/写(特别是在生产中)产生任何影响?根据您的个人经验有更好的建议吗? 我可以在帖子中看到Rolando Update : 这两个参数仍然有些混乱。在可以看到大多数使用的生产配置模板的地方O_DIRECT,没有任何推荐的地方O_DSYNC。 系统 MySQL 5.1.51-enterprise-gpl-pro-log 红帽企业Linux服务器5.5版 具有Raid Controller的DELL DRAC,具有电池写回缓存512MB Dell PERC控制器H700带有备用电池(BBU)。 附加信息 mysql>显示类似'innodb_thread_concurrency'的变量; …

1
大内存环境中的SQL Server TempDB行为
阅读这个问题使我想起了我前一段时间遇到的一个问题。 我们有一个具有512GB RAM的SQL Server,主数据库是450 GB。我们在TempDB中看到了很多动作(好吧,我认为这是“很多动作”-可能不是!)。我安装了演示版的RamDisk Plus服务器,创建了一个50GB的ramdrive,将其指向TempDB,并且根本看不到性能的提高。 是对TempDB的写入始终导致对磁盘的实际物理写入,还是由SQL Server缓存TempDB的写入以像Windows文件系统缓存一样延迟写入? 在这种情况下,虚拟磁盘毫无意义吗? 我知道SQL Server 6.5支持对TempDB-In-Ram,但很久以前就停止了它!

2
将事务日志放置在单​​独的卷[固态]上?
事务日志通常隔离在单独的卷上。据我了解,这种做法的基本原理是事务日志的数据是按顺序写入的-硬盘驱动器可以按顺序执行写入操作,而随机执行则要快得多。这是由于驱动器内部的小针在写入顺序数据块时必须移动短得多的距离,这与随机写入相反。 (很抱歉,您的幼稚的解释。只是想使我所读的内容有意义。) 考虑到这一点……在我看来,固态驱动器几乎没有针头,盘片和东西在内部移动。如果我的数据库和事务日志都位于八个固态驱动器的单个RAID 5上,那么将事务日志移到其自己的单独卷上真的有任何好处吗?如果假定的效率提升是基于顺序写入的前提,即减小了针移动和盘旋转的距离,而固态驱动器没有这些移动部分,那么通过隔离日志我可以获得什么?

1
为什么DELETE比SELECT慢得多,然后按ID进行DELETE?
我有一个非常繁忙的InnoDB表(200,000行,我猜每秒大概有几十个查询)。由于一个错误,我得到了14行,其中包含(相同)无效的电子邮件地址,并希望将其删除。 我只是尝试DELETE FROM table WHERE email='invalid address'了一下,并在大约50秒后得到了“超出了锁定等待超时”。这并不奇怪,因为未对行列进行索引。 但是,然后我做了SELECT id FROM table WHERE email='invalid address',那花了1.25秒。运行DELETE FROM table WHERE id in (...),从SELECT结果中复制粘贴ID,花费了0.02秒。 到底是怎么回事?有人可以解释为什么带有条件的DELETE这么慢以至于超时,但是执行SELECT然后按ID删除却是如此之快吗? 谢谢。 编辑:根据要求,我发布了表结构以及一些explain结果。我还应注意,没有任何外键引用此表。 但是,这种情况对我来说似乎很简单:我有一个未索引的字段可供选择。这需要扫描整个表,但是它并不大。id是主键,因此按ID删除应该是非常快速的。 mysql> show create table ThreadNotification2 \G *************************** 1. row *************************** Table: ThreadNotification2 Create Table: CREATE TABLE `ThreadNotification2` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `alertId` bigint(20) DEFAULT …

2
临时表和表变量之间的INSERT性能差异
我在SQL Server 2005中遇到以下问题:与使用临时表进行相同插入相比,尝试将一些行插入表变量中需要花费大量时间。 这是要插入到表变量中的代码 DECLARE @Data TABLE(...) INSERT INTO @DATA( ... ) SELECT .. FROM ... 这是要插入到临时表中的代码 CREATE #Data TABLE(...) INSERT INTO #DATA( ... ) SELECT .. FROM ... DROP TABLE #Data 临时表没有任何键或索引,两个查询之间的选择部分相同,并且选择返回的结果数约为10000行。单独执行选择所需的时间约为10秒。 临时表版本最多需要10秒才能执行,我不得不在5分钟后停止表变量版本。 我必须使用表变量,因为查询是表值函数的一部分,该函数不允许访问临时表。 表变量版本的执行计划 临时表版本的执行计划

3
针对社交网络/知识库社区的数据库建议?
我正在为一个想在夏天开始的新项目研究各种数据库类型和DBMS。 我已经在MySQL和postgreSQL中构建了系统,现在我想扩展我在数据库中的知识和经验。 我的项目将是一种社交网络/聚合知识的事物。(还没有开发出一个描述它的术语)。 我一直在看: Cassandra(使用自己的查询语言类型);对于功能丰富的内容并提供高性能的查询执行来说,这似乎是一件好事。但是我不太热衷于此,因为它需要Java环境才能工作,而且我希望与Oracle无关。 MongoDB(noSQL类型的DBMS);强大的可伸缩性,但是您将失去经过验证的SQL语言上已经可用的所有功能,例如业务信息查询。 系统要求: 数据文本,日期,时间,xml,小整数,blob, 结构/行为:标准化3NF,非实时,关系,可伸缩,健壮 环境: unix / linux,没有JAVA !,最好在C上运行 我想知道您是否可以指出我应该研究的任何其他数据库系统。 我也看过对象关系数据库,我很喜欢它们与PHP对象(PDO)一起工作的想法,但是它们的性能似乎有点差。 看到这里将有DBA,您对这些系统的任何反馈都将不胜感激。 谢谢

2
有多少存储过程参数太多?
我刚刚开始在SQL Server 2008中编写存储过程,并且有30多个参数。我从来没有写过超过10个参数,而这让我开始思考...什么时候有太多参数? 对于背景...这个程序基本上将INSERT单列成一个单一的表。也将有一个非常相似的地方。尽管稍小;对同一张表执行UPDATE的版本。大多数列相对较小,混合使用int和字符串(varchar(200))。 有什么问题;是好是坏; 一个具有大量参数的程序,我应该开始考虑其他模式的门槛是什么?

2
将7亿行更新为相同的值
我有一个数据仓库(oracle),在这里我需要为所有7亿行的列设置相同的值。 我没有管理员权限,也没有管理员权限,因此需要使用基本sql来完成,并且不会创建临时表。 更复杂的问题是,如果我尝试仅执行一个简单的更新(其中1 = 1),则它会耗尽重做空间。 我现在运行它的方式是这样的循环: loop update mytable set mycolumn = '1' where mycolumn is null and rownum < 50000; commit; end loop 但是我知道这可能很幼稚,必须有一个更快,更优雅的解决方案。

3
查询性能调优
当您完成编写查询/存储的proc /函数时,最快速获取一些性能参数的最有用的方法是什么?您是否运行查询并查看实际的执行计划?如果是这样,您要寻找什么?显然,表/索引扫描很成功,但是还有什么呢?

2
SQL Server:是否有人使用大页面分配调整选项?
有没有人使用过使用的调整选项TF834 large page allocations。我只是在阅读有关它的MS文章,并且想知道是否有人使用过它并看到了性能提升。有什么需要注意的小窍门,陷阱吗? 该服务器是Windows 2008 64位,128 GB RAM,4个CPU 8核心超大型(总共64核心)SQL2005服务器。我希望调整服务器以更好地使用其规格,而不仅仅是使用当前已在其上完成的默认SQL安装。任何额外的提示都将受到欢迎。

3
索引如何影响查询性能?
显然,保留几个不同的索引会对插入和删除性能产生负面影响。查询性能如何:在一个表上保留太多索引完全有意义吗?在任何情况下添加索引都会提高查询性能(当然,对于使用索引的查询而言)还是会因为索引过多而降低查询性能,因为有必要查询所有索引以获取索引。结果? 如果表上有不同的索引:是否会全部考虑这些索引,或者从优化程序的角度来看仅是最佳索引?Oracle是否实现多维索引?

2
Postgresql 8.3:限制每个查询的资源消耗
我正在使用PostgreSQL 8.3 + PostGIS 1.3在Ubuntu 8.04 Hardy上存储地理空间数据。 当buffer()在非常复杂的段上计算时,此特定版本的PostGIS存在一个错误,这会导致查询占用越来越多的内存,直到整个计算机陷入困境。 我正在寻找一种可以实现以下目的的PostgreSQL机制: 限制特定查询使用的内存消耗(可能还有其他资源)。 自动停止执行时间超过特定阈值的查询。 有任何想法吗?


3
如何从Microsoft SQL Server中清除所有旧查询计划?
我们有一个使用Microsoft SQL数据库的现成应用程序。在此应用程序中,我们为每个报告选择各种选择标准。然后,该应用程序将运行这些报告。 我相信我们有一个查询计划问题。我们每天运行的第一份报告非常快地运行了7分钟。我们在第一个报告后生成的任何报告都需要一个多小时。 每天晚上,我们运行一个计划的任务,该任务将停止并启动SQL Server代理和SQL Server。这个SQL Server实例中大约还有25个其他数据库。没有其他数据库存在性能问题,只有我之前提到的现成产品。 有没有一种方法可以清除SQL Server当前在内存中的所有查询计划? 如何做到这一点而又不影响依赖同一服务器上其他数据库的30多个用户?

1
与Google App Engine中的正常Bigtable模型相比,多模型对性能有何影响?
在常规的Google App Engine,多模型或正常的“ Bigtable”模型中,什么能产生最佳性能? 实际上,该多模型在父表中创建了一个称为“类”的列,该列提供了继承跟踪。而从父类继承的普通Bigtable会创建一个新的单独的数据结构,而无法查询父类并查找所有子类型类的所有子类。

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.