我有一个负载很重的 LAMP 系统,每秒处理大约 40 个请求,每秒执行大约 300 个 MySQL 查询。这是 MySQLAdmin 状态的输出:
Uptime: 5051 Threads: 1 Questions: 1418500 Slow queries: 0 Opens: 456
Flush tables: 1 Open tables: 450 Queries per second avg: 280.835
Run Code Online (Sandbox Code Playgroud)
但是,全局状态显示大约 5-10% 的表锁争用。
所以,我想弄清楚需要更长时间的查询。
是否可以将慢查询日志设置为小于一秒?对于我的查询,即使是 100 毫秒的执行时间也很长。
对于以下 SELECT 查询,是否可以避免“使用临时”和“使用文件排序”?我想不出办法做到这一点。

我尝试为 top_expire 和 program 添加索引,但没有帮助 ORDER BY 查询需要 1 秒以上,而没有它在 localhost 上仅为 0.003 秒

SELECT ad.*, p.link
FROM (SELECT ad.*
FROM mod_ad ad
JOIN mod_ad_auta auta ON ad.id = auta.ad_id
WHERE ad.active != 0 AND ad.usr_active != 0 AND ad.expire > 1371151608 AND ad.cat_id = '1' AND ad.price <= '10000'
AND auta.rocnik BETWEEN '1950' AND '2013'
AND auta.km BETWEEN '0' AND '500000'
ORDER BY top_expire DESC, program DESC, ad.id DESC LIMIT 0,10) as ad
JOIN pages …Run Code Online (Sandbox Code Playgroud) 在考虑数据库性能时,VLF 有多重要?什么会描述 VLF 的最佳情况?
我有两个表,第一个表包含 CMS 中的所有文章/博客文章。其中一些文章也可能出现在杂志中,在这种情况下,它们与包含杂志特定信息的另一个表具有外键关系。
这是这两个表的 create table 语法的简化版本,其中删除了一些非必要的行:
CREATE TABLE `base_article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_published` datetime DEFAULT NULL,
`title` varchar(255) NOT NULL,
`description` text,
`content` longtext,
`is_published` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `base_article_date_published` (`date_published`),
KEY `base_article_is_published` (`is_published`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `mag_article` (
`basearticle_ptr_id` int(11) NOT NULL,
`issue_slug` varchar(8) DEFAULT NULL,
`rubric` varchar(75) DEFAULT NULL,
PRIMARY KEY (`basearticle_ptr_id`),
KEY `mag_article_issue_slug` (`issue_slug`),
CONSTRAINT `basearticle_ptr_id_refs_id` FOREIGN KEY (`basearticle_ptr_id`) REFERENCES `base_article` (`id`)
) ENGINE=InnoDB DEFAULT …Run Code Online (Sandbox Code Playgroud) 表T_PIN有 300,000 个引脚和T_POLYGON36,000 个多边形。T_PIN有这个索引:
CREATE SPATIAL INDEX [T_PIN_COORD] ON [dbo].[T_PIN]
(
[Coord]
)USING GEOGRAPHY_GRID
WITH (GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH),
CELLS_PER_OBJECT = 128, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY];
Run Code Online (Sandbox Code Playgroud)
T_POLYGON 已:
CREATE SPATIAL INDEX [T_POLYGON_COORD] ON [dbo].[T_POLYGON]
(
[COORD]
)USING GEOGRAPHY_GRID
WITH (GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH), …Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 spatial query-performance
有人可以帮我比较这些查询并解释为什么 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
MongoDB 查询
db.bpkdmp.aggregate([
{
$match : {
datetime : { $gte : new Date(2013,6,26, 0, 0, 0, 0), $lt : new …Run Code Online (Sandbox Code Playgroud) 我们有什么(软件):
postgresql.conf)硬件:
所以,我们必须加载到数据库 aprox。100.000.000行与bytea列,以及更简单的500.000.000行(无 LOB)。varchar第一个表上有 2 个索引(长度为 13、19),varchar第二个表上有 2个索引(长度为 18、10)。每个表也有生成 id 的序列。
到目前为止,这些操作使用 8 个并行连接和 50 个 JDBC 批处理大小进行。下图展示了系统负载:它对postgresql进程是零负载。加载 24 小时后,我们只加载了 10.000.000 行,这是非常缓慢的结果。

我们寻求帮助调整PostrgreSQL配置的目的是:
1)为了超快加载这个数量的数据,它是一次性操作,所以它可以是临时配置
2) 对于生产模式,通过它们的索引对这 2 个表执行中等数量的 SELECT,无需连接和排序。
performance insert database-tuning postgresql-9.3 bytea performance-tuning
目前,我正在比较两个包含独特StoreKey/ProductKey组合的数据集。
第一个数据集具有StoreKey/ProductKey2012 年 1 月开始到 2014 年 5 月结束之间的唯一销售组合(结果 = 450K 行)。第二个数据集具有独特的StoreKey/ProductKey组合,销售从 2014 年 6 月开始,直到今天(结果 = 190K 行)。
我正在寻找StoreKey/ProductKey属于第 2 组但不在第 1 组的组合 - 即从 6 月初开始销售的新产品。
到目前为止,我已将两个数据集转储到临时表中,为两个表的两个键创建索引,并使用该EXCEPT语句查找唯一项。
比较如此大的数据集的最有效方法是什么?有没有更有效的方法来进行这种大型比较?
performance sql-server sql-server-2008-r2 except query-performance
作为一个非 DBA 的人,我谦虚地对待你们,我确信我的问题充满了概念上的缺陷,并且“这取决于”地雷。我也很确定,你们所有选择回答的人都会想要比我目前所能提供的更多的细节。
也就是说,我对以下情况感到好奇:
如果我连续运行它们,一个接一个地运行,我预计平均需要 7 分钟才能完成。这合理吗?
然而,更重要的是,如果我同时运行这两个查询呢?同时进行两个独立的连接。
现在,如果我同时运行 1,000 个非平凡的查询,我有预感它会导致整体速度变慢。在这种情况下,瓶颈可能在哪里?处理器?内存?驱动器?
同样,我知道在不知道具体细节(我没有)的情况下可能无法准确回答这个问题。我正在寻找一些一般准则,以便在提出以下问题时考虑:
我从一篇博客文章中得到了这个查询:
SELECT object_name, counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Buffer Manager%'
AND [counter_name] = 'Buffer cache hit ratio'
Run Code Online (Sandbox Code Playgroud)
帖子说它会给我一定比例的缓存命中率。它似乎表明它将是一个 0-100 的值(它显示的结果为 87)。
但是当我运行它时,我得到了非常高的数字。下面是一个例子:
object_name counter_name cntr_value
SQLServer:Buffer Manager Buffer cache hit ratio 9990
Run Code Online (Sandbox Code Playgroud)
这是否意味着 99.90%?
如果不是,那是什么意思?我怎样才能得到真正的价值?
注意:我得到的值低至257,高至352363
如果它是相关的,这里有一些其他服务器统计信息:
performance ×10
sql-server ×4
mysql ×3
postgresql ×2
bytea ×1
concurrency ×1
except ×1
index ×1
insert ×1
join ×1
mongodb ×1
order-by ×1
spatial ×1