标签: materialized-views

刷新数据库事务中的物化视图

是否可以在数据库事务中刷新物化视图?

我正在 Laravel 中为复杂查询编写测试用例,它使用事务在测试运行后回滚。

当我添加数据并刷新视图时 - 当我执行 select 语句时不会出现任何记录

postgresql transactions materialized-views rollback

5
推荐指数
1
解决办法
4062
查看次数

选择每组的最后一条记录作为物化视图bq

是否可以选择每个组中版本最高的记录并将其存储为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

5
推荐指数
1
解决办法
2681
查看次数

如何获取PG中物化视图创建的进度

我已经create materialized view运行了好几天了,有没有办法知道查询的进度?

任何指标都可以,例如完成百分比、剩余时间、剩余工作消耗的磁盘空间。我主要关心磁盘空间的使用情况,我可以从其他指标(例如完成百分比)中得到粗略的估计。

PG版本是12.2

postgresql materialized-views

5
推荐指数
0
解决办法
292
查看次数

5
推荐指数
1
解决办法
2781
查看次数

错误:必须是物化视图 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)

我该如何解决?

postgresql view materialized-views

5
推荐指数
1
解决办法
7627
查看次数

TimescaleDB 物化视图性能

我面临着 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)

sql postgresql materialized-views timescaledb

5
推荐指数
0
解决办法
971
查看次数

物化视图日志的事务性能影响

我一直在研究使用物化视图进行数据聚合和报告,以便主要以事务为中心(使用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文档中找不到对此的任何引用.任何有关该主题的文献或建议将不胜感激.

谢谢你的帮助!

oracle logging materialized-views

4
推荐指数
1
解决办法
5209
查看次数

强制Oracle数据库不实现CTE

我对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)

sql oracle view materialized-views

4
推荐指数
1
解决办法
3264
查看次数

Oracle禁用实体化视图刷新

任何人都有语法禁用Oracle中物化视图的刷新?我很难使用Oracle文档而且我找不到在线示例.

我理解它的开头类似于:ALTER MATERIALIZED VIEW view_name ...

oracle materialized-views

4
推荐指数
1
解决办法
9479
查看次数

物化视图中完全刷新和快速刷新之间有什么区别?

我在我自己的架构中有物化视图,物化视图源是另一个架构表但是,这个主表有900行,我在这个主表上做了一些dml操作,之后我将刷新这个物化视图,你知道,我做了一些研究"如何刷新我自己的物化视图",它说"你可以完成刷新或快速刷新",但我不明白这些解决方案的含义所以我的问题很简单;

MV中的完全刷新和快速刷新有什么区别?

PS:如果我的主表有100万行或更多行,我应该选择哪一行?(快或完)

谢谢您的回复.

oracle rdbms materialized-views

4
推荐指数
1
解决办法
9879
查看次数