是否可以在数据库事务中刷新物化视图?
我正在 Laravel 中为复杂查询编写测试用例,它使用事务在测试运行后回滚。
当我添加数据并刷新视图时 - 当我执行 select 语句时不会出现任何记录
是否可以选择每个组中版本最高的记录并将其存储为bigquery中的物化视图?
源表
version name value
1 a 100
1 b 200
1 c 300
2 c 400
Run Code Online (Sandbox Code Playgroud)
我只想获取每个组的最后一条记录(按版本分组),所以输出应该是这样的:
version name value
1 a 100
1 b 200
2 c 400
Run Code Online (Sandbox Code Playgroud)
尝试使用以下答案: https: //stackoverflow.com/a/1313293/5839247,得到一个错误:
Materialized views do not support analytic functions or WITH OFFSET.
尝试使用此答案中的方法:https: //stackoverflow.com/a/7745635/5839247,得到Unsupported operator in materialized view: Join.
文档:https ://cloud.google.com/bigquery/docs/materialized-views#supported_mvs
sql materialized-views google-bigquery google-cloud-platform
我已经create materialized view运行了好几天了,有没有办法知道查询的进度?
任何指标都可以,例如完成百分比、剩余时间、剩余工作消耗的磁盘空间。我主要关心磁盘空间的使用情况,我可以从其他指标(例如完成百分比)中得到粗略的估计。
PG版本是12.2
postgresql如何实现快速刷新物化视图 如何仅更新基表对物化视图的新更改
我收到以下错误:
ERROR: must be owner of materialized view mv_sessions
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)
当尝试刷新我的物化视图时:
REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions;
Run Code Online (Sandbox Code Playgroud)
的所有者mv_sessions是我的自定义master用户。partner我已将所有权限分配给我尝试刷新视图的子用户。
我不想成为partner的所有者mv_sessions。还有其他子用户需要能够刷新视图。
我尝试使用触发功能:
BEGIN
REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions;
RETURN NULL;
END
Run Code Online (Sandbox Code Playgroud)
得到同样的错误:
psycopg2.errors.InsufficientPrivilege: must be owner of materialized view mv_sessions
CONTEXT: SQL statement "REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions"
PL/pgSQL function partners.refresh_mv_sessions() line 3 at SQL statement
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我面临着 TimescaleDB 连续聚合的一些性能问题,并且我不完全理解为什么会发生这种情况。
我有一个时间序列数据表:
CREATE TABLE IF NOT EXISTS ack_alarm_number
(
time TIMESTAMP NOT NULL,
entity_id INT,
user_id VARCHAR(255),
value INT
);
SELECT create_hypertable('ack_alarm_number', 'time', if_not_exists => TRUE);
Run Code Online (Sandbox Code Playgroud)
我想通过entity_id或/和user_id从我的表中获取每日平均值,而且我预计我的表将有很多行并且聚合查询可能会很慢,所以我决定创建一个连续聚合:
CREATE MATERIALIZED VIEW IF NOT EXISTS ack_alarm_number_daily
WITH (timescaledb.continuous) AS
SELECT time_bucket(INTERVAL '1 day', time) AS bucket,
entity_id, user_id,
AVG(value)
FROM ack_alarm_number
GROUP BY entity_id, user_id, bucket;
Run Code Online (Sandbox Code Playgroud)
之后我生成了约 700 万行,时间间隔约为 3 个月。
当我执行这样的查询时,它工作得很好:
select bucket, avg(m.avg)
from ack_alarm_number_daily m
where m.entity_id = 2
group by bucket
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行以下查询以获得所有实体的平均数时,它变得非常慢〜15秒:
select bucket, avg(m.avg)
from …Run Code Online (Sandbox Code Playgroud) 我一直在研究使用物化视图进行数据聚合和报告,以便主要以事务为中心(使用Oracle数据库).当前的报告系统依赖于一系列视图,这些视图模糊了应用程序的许多复杂数据逻辑.这些视图在调用系统时会给系统带来沉重的负担.
我们感兴趣的是使用"快速刷新"进行增量更新,以便在用于报告之前执行一些复杂的查询逻辑; 但是,组织内部存在一个问题,即物化视图日志(这是快速刷新所需)会对我们当前在数据库中的事务性能产生影响.这种表现对我们的组织非常重要,因此非常担心会发生任何变化.
以下是我们需要实现的物化视图日志类型的示例:
create materialized view log on transaction
with rowid, sequence(transaction_id,account_id,order_id,currency_id,price,transaction_date,payment_processor_id)
including new values;
Run Code Online (Sandbox Code Playgroud)
我们不会在更新时使用"on commit"子句,而是在创建视图时使用"on demand"子句,因为我们知道这会对性能产生影响.
实现这种类型的日志会影响数据库事务性能吗?我想它必须略微影响性能,因为在提交中包含了一个额外的写入过程(对日志),但我在Oracle文档中找不到对此的任何引用.任何有关该主题的文献或建议将不胜感激.
谢谢你的帮助!
我对cte有一些问题,如果我使用这个查询oracle实现了cte1视图和查询会很慢
with cte1 as (..),
cte2 as ( ... use cte1 ...),
cte3 as ( ... use cte1 ...)
select * from cte2 join cte3
on ...
Run Code Online (Sandbox Code Playgroud)
在以下查询中,Oracle没有实现cte1,查询速度比以前快20倍:
with cte1 as (..),
cte2 as ( ... use cte1 ...)
select * from cte2 on ....
Run Code Online (Sandbox Code Playgroud)
同样
with cte1 as (..),
cte3 as ( ... use cte1 ...)
select * from cte3 on ....
Run Code Online (Sandbox Code Playgroud)
是否有可能强制Oracle不实现CTE,因此它将使用idexes?
查询1的执行计划:
Plan hash value: 1038428573
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes …Run Code Online (Sandbox Code Playgroud) 任何人都有语法禁用Oracle中物化视图的刷新?我很难使用Oracle文档而且我找不到在线示例.
我理解它的开头类似于:ALTER MATERIALIZED VIEW view_name ...
我在我自己的架构中有物化视图,物化视图源是另一个架构表但是,这个主表有900行,我在这个主表上做了一些dml操作,之后我将刷新这个物化视图,你知道,我做了一些研究"如何刷新我自己的物化视图",它说"你可以完成刷新或快速刷新",但我不明白这些解决方案的含义所以我的问题很简单;
MV中的完全刷新和快速刷新有什么区别?
PS:如果我的主表有100万行或更多行,我应该选择哪一行?(快或完)
谢谢您的回复.
postgresql ×5
oracle ×4
sql ×3
view ×2
insert ×1
logging ×1
rdbms ×1
rollback ×1
timescaledb ×1
transactions ×1