Articles of 数据库性能

为什么MySQL在不同的版本中对我的查询使用不同的索引?

我有一个大型的InnoDB表(大约800MB),我想计算行数。 我知道SELECT COUNT(*)在InnoDB中有问题,但是我所看到的解决scheme之一是创build一个二级索引 ,这比通过PRIMARY咀嚼的速度快得多,至less对于行数来说。 我已经将表内容复制到第二个服务器。 服务器的速度更快,当然复制产生了一个很好的,紧凑的表,没有遭受删除和更新。 所以在新的服务器上一切都很好,但是关于旧服务器的行为还是令我困惑: 我有一个PRIMARY索引,另一个索引(称为index2 )已经在表上定义。 在旧的服务器上(MySQL 5.0.27),我可以解释EXPLAIN SELECT COUNT(*) FROM myTable ,看到它将使用PRIMARY索引。 查询需要一分钟。 如果我SELECT COUNT(*) FROM myTable USE INDEX(index2) ,它需要SELECT COUNT(*) FROM myTable USE INDEX(index2) 。 如果我把WHERE someCol > lowest_possible_value它也select更快的指标。 在新的服务器(MySQL 5.1.52)上,同样的EXPLAIN语句告诉我它将使用index2 ,而没有任何提示。 一个简单的SELECT COUNT(*) FROM myTable非常快,大约20-30ms。 我可以运行SELECT COUNT(*) FROM myTable USE INDEX(PRIMARY) ,强制它使用“坏”索引,它需要更长的时间 – 只有3-4秒,但正如我所说的还有其他的差异来说明,这比“好”(非PRIMARY )指数还要慢上百倍。 为什么新的MySQL实例select“正确的”索引? 我可以在旧服务器上做些什么来重现这种行为? 我想避免一个完整的升级,但这不是没有问题的。

数据库数目或不。 表格?

我使用ImpressPages CMS v 2.6运行三个不同的站点。ImpressPagesbuild立在PHP 5.3和MySQL 5上。每个站点有大约33个MySQL表,数据库使用MyISAM引擎。 我有两个configuration选项。 首先:我可以为每个站点创build3个不同的数据库。 第二:我可以为每个站点使用不同table_prefix_的单个数据库。 我对上述两个选项感到困惑。 哪个选项可以节省共享主机scheme的资源,而不会影响网站性能。 我正在通过数据库计数限制问题 ,它指出没有没有限制。 的数据库,但我的问题是有多个数据库或多个表在一个数据库中,哪一个更好的select,而不影响性能?

如何设置MySQL的内部时区支持?

今天, MySQL在Facebook上发布了关于MySQL性能的以下内容: 今天我们发现了一个完全出乎意料的性能问题 – 如果正在使用TIMESTAMP数据types,并将MySQLconfiguration为使用系统时区,则会在具有全局互斥体的Linux C库中创build一个代码。 为了增加伤害,在单线程工作负载下,MySQL的内部时区支持(使用mysql.time_zone *表)速度提高了30%。 拥有30个客户端线程MySQL的内部时区转换快了30倍。 这一天开始的东西看起来像一个MySQL的错误,但显然这是一个MySQL的胜利。 – domas 我如何确定我的MySQL实例是使用较慢的系统时区还是使用更快的mysql.time_zone*表? 即我应该检查哪些MySQLconfiguration参数? (我们实际上使用Amazon RDS而不是托pipe我们自己的数据库,但是我不认为除了检查my.cnf ,我需要使用RDS参数组来检查或更改configurationvariables。)

数据库服务器应该在哪里,它的更新脚本应该从哪里运行?

我目前有一个Web应用程序和数据库在同一台服务器上。 我正在将数据库移动到一个指定为数据库的新服务器上。 现在,我已经在Web应用程序上运行了每晚脚本,这些脚本为我们的ERP系统中的应用程序插入和更新数据。 执行此导入的脚本是否应该从数据库服务器或应用程序服务器运行? 把所有的应用程序逻辑放在一起是合理的,但是从性能的angular度来看,更有意义(我认为)让每晚更新数据库的脚本从实际的数据库服务器运行。 可能或不需要的问题,但我有一个网站,3个Web应用程序,都是从本地数据库安装转换到新的中央数据库。 最后一个问题应该是数据库服务器在DMZ中,但被locking为仅接受应用程序服务IP的连接,还是应该在防火墙之后? 其他信息,如果有帮助的话:Python应用程序(TG和Flask)全部使用postgresql 9运行 编辑:如果这是这个错误的地方,请让我知道它应该发布。 我原本是在程序员那里,但没有得到任何答复,在重新阅读我的问题后,这个网站感觉“更好”。

Mysqld.exe内存大小增加到130MB,性能差

我已经用java 8和mysql服务器部署了我的应用程序。 运行mysqld.exe时需要占用130 MB的内存,并停止增加。 但之后我的应用程序的性能很差。 任何人都可以帮助我找出背后的原因。 哪个因素增加了mysqld.exe的内存大小,以及为什么我的应用程序被数据库困住了。 提前致谢

在特定的时间框架连接到postgresql

我怎样才能在特定的时间框架中find/使用PostgreSQL的连接? 在PostgreSQL日志中,我越来越 JSTERROR: canceling statement due to user request 萨尔日志: MEM AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 09:00:01 AM 25773712 40158364 60.91 257512 35876668 4552540 5.53 09:10:01 AM 25728656 40203420 60.98 258080 35920500 4555720 5.53 一些configuration设置: max_connections = 2000 superuser_reserved_connections = 3 shared_buffers = 1GB effective_cache_size = 128MB work_mem = 1GB maintenance_work_mem = […]

PostgreSQL很多大型数组和写入

我运行一个python程序,产生8个线程,每个线程通过psycopg2启动自己的postmaster进程。 这是为了最大限度地使用我的CPU核心(8)。 每个线程调用一系列SQL函数。 这些函数中的大多数通过使用unnest()并将每个FLOAT8乘以与每行关联的另一个FLOAT8,从而通过成千上万的行关联到一个大的FLOAT8 []数组(250-300)值。 这种数组方法最大限度地减less了索引和表的大小。 该函数以插入到同一表格(pk INT4,数组FLOAT8 [])的一行的另一个表中的方式结束。 一些由python调用的SQL函数将会更新这些types的表(大数组)。 现在我已经configurationPostgreSQL使用大部分的内存caching(我认为57 GB的effective_cache_size),只有less量的共享内存(我认为是1GB)。 首先,我想知道Cache和共享内存在PostgreSQL(和我的应用程序)方面有什么区别。 我注意到,在大多数读取密集型应用程序(Select unnest(array)等)期间,我的总CPU处理能力只有大约20-40%被使用。 所以第二,我想知道我能做些什么来改善这个问题,这样就可以使用100%的CPU。 根据我的观察,似乎与python或其GIL没有任何关系。 谢谢

我应该用200万行分区我的主表吗?

我是一名开发人员,需要一些DBAbuild议。 我们开始得到一个MSSQL2005数据库的性能问题。 事件的可见效应主要是服务器上的CPU占用率,但是操作报告说,这也是从SAN中耗尽资源(并不总是)。 问题的主要来源在某些应用程序中是肯定的,但是我想知道是否应该划分一些主要的表来缓解I / O压力。 一个文件中的基数约为60GB。 主表(订单)有2.1百万行215科朗(但没有巨大的)。 我们有一个整数作为PK,所以应该可以定义一个分区函数。 我们会用分区来赢得一些东西吗? 将分区索引给我们买东西? 这里是关于数据库和表格的一些更多的事实 database_name database_size unallocated space My_base 57173.06 MB 79.74 MB reserved data index_size unused 29 444 808 KB 26 577 320 KB 2 845 232 KB 22 256 KB name rows reserved data index_size unused Order 2 097 626 4 403 832 KB 2 […]

调整100个SQL数据库的build议

我正在运行几台SQL服务器,每台服务器为客户运行几百个多台数据库。 就模式而言,它们都是均匀设置的,但是数据的用户使用情况在数据库和数据库之间差别很大。 自动索引/分析/调整这么多数据库的最好方法是什么? 由于至less有600个或更多的目录我不能有人手动configuration,并根据每个数据库使用模式的要求进行索引。 我目前正在运行SQL 2005,但将移动到2008年,所以与任何工作的解决scheme都很好。

Firebird数据库损坏的原因

我在多个基于Windows的服务器上运行几个不同的Firebird版本(2.0,2.1),这些服务器硬件差异很大。 他们之间唯一匹配的事情是,他们正在运行相同的数据库结构的家庭build成的应用程序。 最近我在多台服务器上看到了大规模的减速。 事实certificate,数据库被破坏了,所以每次破坏时,我都会修复,备份和恢复数据库,并且一段时间(1-2周)都没有问题,然后再次重复。 谢天谢地,我还没有看到任何数据丢失或损坏。 问题是,每一次这样的停机都会导致生产力的损失,而且由于一些数据库位于偏远地区,往往会对我造成很大的影响。 我一直在试图找出是什么原因造成的腐败,但我一直无法。 它运行在不同的硬件上的事实表明,它不应该是一个基于硬件的问题。 如果我们排除硬件问题,我不好意识到这是Firebird中的一个bug,因为我没有通过SQL做任何事情。 你有什么想法如何找出究竟是什么造成的腐败,希望解决这个问题? 根据第一个回复:我在firebird.log中遇到了几个不同的问题: INET/inet_error: read errno = 10054 INET/inet_error: select in packet_receive errno = 10038 Relation has 12 orphan backversions (5 in use) in table LIMITAI (139) Index 1 is corrupt on page 61700 level 1. File: ..\..\..\src\jrd\validation.cpp, line: 1659 (repeats for multiple pages and index numbers) […]