我有一个有点复杂的 Oracle 查询,需要大约半小时才能完成。如果我采用查询的慢部分并单独运行它,它会在几秒钟内完成。这是隔离查询的 SQL Monitor 报告的屏幕截图:
以下是作为完整查询的一部分运行时的相同逻辑:
颜色对应于两个屏幕截图中的相同表格。对于慢查询,OracleMERGE JOIN
在JOIN
. 结果,大约有 1.5 亿个中间行被不必要地处理。
我可以通过查询提示或重写来解决这个问题,但我想尽可能多地了解根本原因,以便将来避免这个问题,并可能向 Oracle 提交错误报告。每次我得到糟糕的计划UNPIVOT
时,查询文本中的内容都会转换为UNION ALL
计划中的一个。为了进一步调查,我想防止该查询转换发生。我一直找不到这个转换的名字。我也找不到可以阻止它的查询提示或下划线参数。我正在开发服务器上进行测试,所以一切顺利。
有什么我可以做,以防止的查询转换UNPIVOT
到UNION ALL
?我在 Oracle 12.1.0.2 上。
由于 IP 原因,我无法共享查询、表名或数据。我无法想出一个简单的复制品。话虽如此,我不清楚为什么需要这些信息来回答这个问题。下面是 UNPIVOT 查询的示例以及作为 UNION ALL 实现的相同查询。
我正在阅读这篇文章,似乎没有办法做这样的事情:
SELECT COUNT(*)
WHERE SHOW VARIABLES
WHERE Variable_name = 'innodb_ft_cache_size'
Run Code Online (Sandbox Code Playgroud)
我可以执行以下操作,但这在 MySQL 5.7 中不起作用(表中没有变量)
SELECT COUNT(*)
FROM information_schema.GLOBAL_VARIABLES
WHERE Variable_name = 'innodb_ft_cache_size' (always returns 0)
Run Code Online (Sandbox Code Playgroud)
我需要这样做的原因是在存储过程中检测他们是否有能力做全文。它需要在MySQL
MySQL 和变体中工作,所以我不能简单地解析@@verison.
有没有另一种方法可以做到这一点?
这是一个works on 5.5,5.6, and 5.7
用于检测是否存在全文功能的存储过程。这也应该适用于 mysql 变体
begin
set @supports_ft = 0;
set @information_schema_exists := (SELECT COUNT(SCHEMA_NAME) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'information_schema');
if @information_schema_exists > 0 then
set @information_schema_exists_global_vars_exists := (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'information_schema' AND TABLE_NAME = 'GLOBAL_VARIABLES');
if @information_schema_exists_global_vars_exists …
Run Code Online (Sandbox Code Playgroud) 我想在 Amazon RDS MySQL 数据库实例和 Amazon RDS 外部的 MySQL 实例之间设置复制。
但是 Slave_IO_Running: Connecting 如何解决这个问题?
我已经完成了以下命令。
mysql>CALL mysql.rds_set_external_master ('192.168.xx.xxx', 3306,
'repl2', '111111', 'mysql-bin-changelog.000003', 598, 0);
mysql> CALL mysql.rds_start_replication;
+-------------------------+
| Message |
+-------------------------+
| Slave running normally. |
+-------------------------+
1 row in set (1.01 sec)
Run Code Online (Sandbox Code Playgroud)
我有一个生产 postgres 10 数据库。每小时我都会在物化视图上运行“同时刷新物化视图”以重新计算值;每天只添加几个新行。
所有物化视图(及其索引)的大小都在急剧增加。应该是 102 MB 的视图现在是 1700 MB,并且指数也遭受了类似的通货膨胀。并且刷新时间从17秒增加到10分钟。由于视图及其索引的增长,整个数据库大小在最后一天从 4 GB 增长到 21 GB。我无法进行非并发刷新,因为这些视图不断被读取。
运行刷新会触发大量磁盘 I/O。
我不知道是什么导致了这个问题。我启用并配置了 autovacuum。我有 8GB 的内存,work_mem 设置为 256 MB。
mysql ×2
amazon-ec2 ×1
amazon-rds ×1
aws ×1
oracle ×1
oracle-12c ×1
postgresql ×1
replication ×1
union ×1
unpivot ×1