Questions tagged «performance»

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

7
为什么要使用innodb_file_per_table?
有许多文章夸大了(当然是恕我直言)对的需要innodb_file_per_table。我知道使用innodb_file_per_table,应该可以更好地控制各个表;例如分别备份每个表。但是,关于获得更好性能的要求令人怀疑。 在我的测试中,在性能没有差异innodb_file_per_table,并ibdata1为60GB的数据库。当然,这是对普通查询的简单测试,现实生活中复杂查询的情况可能有所不同(这就是我问这个问题的原因)。具有64位linux ext4可以有效处理大文件。 使用innodb_file_per_table,需要更多的磁盘I / O操作;这对于复杂的JOINs和FOREIGN KEY约束非常重要。 表空间在单个共享ibdata;单独表的专用表空间如何节省磁盘空间?当然,使用释放每个表的表空间更为容易ALTER,但是这仍然是一个昂贵的过程(使用表锁)。 问题:是否innodb_file_per_table对更好的mysql性能有影响?如果是,为什么?

3
我应该为哪种多语言网站选择哪种排序规则?
归类对查询速度有影响吗?表格的大小会根据排序规则进行更改吗? 如果我想建立一个必须支持所有可能语言的网站(以Google为例),那么推荐的整理方法是? 我将需要存储诸如之类的字符日本語,我在网站上的搜索将必须返回something以作为sóméthíng输入,并且它也必须不区分大小写。 我怎么知道哪个是最好的选择?哪种排序规则更适合这种情况?

2
提高大型PostgresSQL表中COUNT / GROUP-BY的性能?
我正在运行PostgresSQL 9.2,并具有12列的关系,大约有6,700,000行。它包含3D空间中的节点,每个节点都引用一个用户(创建它的用户)。为了查询哪个用户创建了多少个节点,我执行以下操作(添加explain analyze以获得更多信息): EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1) -> Seq Scan on treenode (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1) Filter: (project_id = 1) Total runtime: 1747.653 ms 如您所见,这大约需要1.7秒。考虑到数据量,这还算不错,但是我想知道是否可以改进。我试图在用户列上添加一个BTree索引,但这没有任何帮助。 您还有其他建议吗? 为了完整起见,这是完整的表定义及其所有索引(没有外键约束,引用和触发器): Column …



5
查询调优应该是主动还是被动?
作为软件开发人员和有抱负的DBA,我在设计SQL Server数据库时尝试结合最佳实践(我的软件有99%的时间位于SQL Server之上)。在开发之前和开发过程中,我会做出最好的设计。 但是,就像其他任何软件开发人员一样,这里添加了功能,错误以及对需求的更改,这些需求要求更改/创建的数据库对象。 我的问题是,查询调优应该是主动还是被动?换句话说,在对代码/数据库进行大量修改之后的几周内,我是否应该留出一天时间检查查询性能并据此进行调整?即使看起来运行正常吗? 还是我应该意识到,性能低于平均水平的应该是数据库检查并回到众所周知的黑板上? 查询调优可能会花费大量时间,并且取决于最初的数据库设计,它可能带来的收益很小。我对接受的作案手法感到好奇。

2
使用MAX文字或更具体的小字体
有人正在查看我的DDL代码以创建表,并提出了建议,当他们看到我看到使用VARCHAR(256)文本字段时,我希望它很小,例如名字或其他名称,我应该始终使用VARCHAR(MAX)并链接为什么使用varchar(max )。我读了它,但它似乎过时了,因为它专注于2005年,并且似乎没有提供任何真正的理由在所有文本字段上每行可能分配多达2 GB的空间。 从性能,存储等方面来看,应该如何决定是否VARCHAR(MAX)对现代版本的SQL Server 使用或更小的更具体的类型?(例如,2008、2012、2014)

3
频繁查询缓存失效的开销值得吗?
我目前正在使用一个MySQL数据库,在该数据库中,我们从查询缓存中看到大量无效信息,这主要是由于在许多表上执行的INSERT,DELETE和UPDATE语句数量很多。 我要确定的是,将查询缓存用于针对这些表运行的SELECT语句是否有任何好处。由于它们是如此之快地失效,在我看来,最好的办法是仅对这些表的SELECT语句使用SQL_NO_CACHE。 频繁失效的间接费用是否值得? 编辑:在下面的用户@RolandoMySQLDBA的请求下,这是MyISAM和INNODB上的信息。 创新数据库 资料大小:177.414 GB 索引大小:114.792 GB 桌子大小:292.205 GB 我的ISAM 资料大小:379.762 GB 索引大小:80.681 GB 桌子大小:460.443 GB 附加信息: 版本:5.0.85 query_cache_limit:1048576 query_cache_min_res_unit:4096 query_cache_size:104857600 query_cache_type:开启 query_cache_wlock_invalidate:关闭 innodb_buffer_pool_size:8841592832 24GB RAM

2
Percona与MySQL
什么是Percona? 它与MySQL有何不同? 我们何时应该考虑从现有的MySQL切换到Percona(或升级)? 为了在我们的情况下添加一些细节,我们几乎专门使用InnoDB(据我了解Percona做了很多优化),它具有广泛的外键约束和一些存储过程。 我们目前发现的是MySQL无法优化查询,因此任何超过3-4个联接的查询都必须使用STRAIGHT联接显式构建以提高性能。

5
为什么需要定期重启才能保持实例正常运行?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我们已经在SQL 2005上提供了一个生产数据库服务器。一切正常运行了一段时间,但是几周后,我们发现性能明显下降。仅重新启动SQL Server才能使性能恢复正常。 一些背景: 运行1200多个数据库(大多数是单租户,一些是多租户)。在任何人只讲讲多租户讲座之前,有充分的理由保持这种结构…… RAM是16 GB。重新启动后,SQL Server很快就可以恢复到15 GB的使用率。 活动的数据库连接大约有80个连接-考虑到每个进程每个Web服务器有一个连接池,我们认为这很健康-因此我们没有连接泄漏问题。 我们在非高峰时间尝试了几种方法:-运行DBCC DROPCLEANBUFFERS(带有CHECKPOINT)以清除数据缓存。它无效,也不会清除任何RAM使用情况。-运行FREEPROCCACHE和FREESYSTEMCACHE清除查询计划和存储的proc缓存。没有效果。 显然,在活动的生产环境中重新启动SQL Server是不理想的。我们缺少了一些东西。还有其他人经历吗? 更新:2012年4月28日 仍在解决此问题。我已将SQL Server的内存降低到10 GB,只是为了排除与操作系统的争用。我正在接近缩小范围,但是下一步需要一些帮助。 这是我发现的,重新启动SQL Server之后,页面文件在12.3 GB和12.5 GB之间徘徊。它将保持这种状态数天。服务器线程总数将介于850和930之间-连续几天也稳定且一致(sqlserver取决于流量,稳定在55和85之间)。 然后,有一个“事件”。我不知道事件是什么,我无法在日志中看到它,并且在事件发生的一周中的任何一天或时间都看不到任何一致的信息,但是突然之间,他的页面文件跳到了14.1或14.2。 GB,并且线程数跳到1750和1785之间。 在发生这种情况时检查perfom,其中有900多个线程是sqlserver。所以我去sp_who2看看这些线程是从哪里来的...而且只有大约80个使用过的数据库连接。 所以....有谁知道我如何找到SQL Server上这900个线程的其余位置以及它们在做什么? 更新:2012年6月1日 仍在与问题作斗争。对于仍然阅读此书的人来说,线程跳转的问题已得到解决。这是由自动的ComVault备份软件引起的。它正在创建一个线程,尝试备份不再存在的数据库(它正在维护以前的数据库列表),而不是仅备份当前数据库。 但是-问题仍然存在,我们必须每周重新启动,花几天时间。与Rackspace团队合作,看看他们是否可以阐明任何想法。

5
重新启动SQL Server会加快速度吗?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 8年前。 我注意到一些DBA非常频繁地重新启动SQL Server,有时甚至每晚重新启动一次。我相信他们这样做是为了释放一些内存,或者也可能加快查询速度。我知道重启后必须重新编译查询计划,但是即使包括在内,我也想知道这种做法是否有净收益。 每天重新启动SQL Server会使其运行速度更快吗?

6
检查InnoDB表是否已更改的最快方法
我的应用程序非常耗费数据库。当前,我正在运行MySQL 5.5.19并使用MyISAM,但是我正在迁移到InnoDB。剩下的唯一问题是校验和性能。 我的应用程序CHECKSUM TABLE在高峰时间内每秒执行约500-1000条语句,因为客户端GUI不断轮询数据库以查找更改(它是一个监视系统,因此必须非常敏感且快速)。 使用MyISAM,可以在修改表时预先计算出实时校验和,而且校验和非常快。但是,InnoDB中没有这样的东西。所以,CHECKSUM TABLE非常慢。 我希望能够检查表的最后更新时间,不幸的是,这在InnoDB中也不可用。我被困住了,因为测试表明应用程序的性能急剧下降。 太多的代码行更新了表,因此在应用程序中实现逻辑以记录表更改就成为不可能了。 有什么快速的方法可以检测InnoDB表中的更改?

3
LIKE如何实施?
谁能解释一下LIKE运算符如何在当前数据库系统(例如MySQL或Postgres)中实现?还是让我参考一些解释它的参考文献? 天真的方法是检查每条记录,在感兴趣的字段上执行正则表达式或部分字符串匹配,但是我有一种感觉(希望),这些系统做得更聪明。

3
mysql dump import在我的开发人员的机器上非常慢
我有一个SQL转储,它很大(411 MB),并且在服务器A上花费了10分钟的导入时间,在我的工作站B上的同一次导入,估计(pipeviewer)需要8个小时的时间来导入(它在40分钟内导入了31 MB) ),这是慢53倍。 规格: Server A: MySQL Version: 5.5.30-1.1 (Debian) 2 GB RAM 1 core QEMU Virtual CPU version 1.0 - cpu MHz: 3400.020 Workstation B: MySQL Version: 5.5.41-MariaDB-1ubuntu0.14.04.1 14 GB RAM 4 cores Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz - cpu MHz: 1600.000 mysql / maria配置是标准配置。 我昨天切换到工作站上的MariaDB-但是在MariaDB之前,统计数据甚至更糟。 我已经删除了工作站上的所有数据库-没什么不同。 …

1
SQL Server-是否有人使用SUMA,跟踪标志8048或跟踪标志8015?
最近包括SQL Server启动跟踪标记8048,以解决SQL Server 2008 R2系统中的严重自旋锁争用问题。 希望听到其他人发现使用情况的情况,其中使用情况是通过跟踪标志8048(将查询内存授予策略从每个NUMA节点升级到每个核),跟踪标志8015(SQL Server忽略物理NUMA)或SUMA(交错访问足够均匀的内存(在某些NUMA计算机上为BIOS选项)。 跟踪标记8048 http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus每个数字节点可能需要跟踪标志-8048.aspx 跟踪标记8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx 详细的系统工作负载,从出现问题的系统收集的指标以及在干预后从系统收集的指标。 跟踪标志8048是一个“修复程序”,但这是最好的修复程序吗?由于跟踪标志8015,SQL Server忽略物理NUMA会完成相同的事情吗?如何将BIOS设置为交错内存,使服务器具有模仿SMP的SUMA行为而不是NUMA行为? 和平!tw:@sql_handle 关于系统:-4个六核Xeon E7540 @ 2.00GHz,超线程-128 GB RAM-WS2008R2-MSSQL 2008 R2 SP2-maxdop 6 关于工作负载:-由2个报表应用程序服务器驱动的1000个批处理计划/排队报表。-3种批次:每天,每周,每月-与SQL Server的所有报表应用程序服务器连接均作为单个服务帐户进行-报表并发最大数= 90 故障系统的主要发现:-从Perfmon开始,间隔为15秒--系统保持95%-100%的CPU繁忙--SQL Server缓冲区页面查找<10000次/秒 从等待和自旋锁DMV开始,间隔5分钟 高CMEMTHREAD服务员和等待时间 SOS_SUSPEND_QUEUE高旋转和后退 鲍勃·多尔(Bob Dorr)在跟踪标记8048上的CSS工程师博客文章中指出,由于查询内存授予的瓶颈,每个NUMA节点具有8个以上内核的系统可能会遇到类似的症状。跟踪标志8048会将策略更改为每个核心而不是每个NUMA节点。 干预 使用-T8048重新启动MSSQL。区别立即显而易见:缓冲区页面查找率上升到100万以上,每秒达到800万。麻烦的批处理工作负载以前不到24小时就无法完成,而不到4小时就可以完成。提交了不是调查或干预重点的另一批工作量,作为验证跟踪标志8048的校正值的一部分(并确保其不必要的副作用最小)。该报告批处理先前在2小时内完成;带有跟踪标记8048的报告批处理大约在20分钟内完成。 每晚ETL也遇到了好处。ETL时间从大约60分钟减少到40分钟。 从多个地方收集信息,我推测报告排队的程度很高,并发报告计数大于硬件线程计数,并且所有用户的单一用户帐户组合在一起给一个NUMA节点施加了压力,直到工作线程压力导致它对于同一个用户帐户的下一个传入连接请求不利,此时下一个NUMA节点将立即获得一定数量的连接。每个NUMA节点最终都有很大可能强调查询内存授予瓶颈。 为查询内存授权打开更多通道消除了瓶颈。但是,我不确定费用。鲍伯·多尔(Bob Dorr)的CSS帖子清楚地表明,带有跟踪标志8048的其他内存开销。单页分配器区域内的开销是否受MSSQL 2008 R2最大服务器内存控制?如果是这样,我猜想系统在缓冲池缓存中将只少一些数据库页面。如果没有,应该降低最大服务器内存来容纳吗?

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.