AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[columnstore](dba)

Martin Hope
Avi
Asked: 2020-11-24 03:21:28 +0800 CST

小表上的聚集列存储索引

  • 5

聚集列存储索引表通常对大型表很有用。理想情况下有数百万行。对查询也很有用,它只选择此类表中可用列的子集。

如果我们打破这两个“规则”/最佳实践会发生什么?

  1. 就像拥有一个聚集列存储索引表,它最多只能存储几千或几十万行。
  2. 并针对需要所有列的那些聚集列存储表运行查询。

与行存储聚集索引表相比,我的测试没有显示任何性能下降。这对我们来说很棒。

是否存在违反这两条规则的“长期”影响?还是任何尚未出现的隐藏陷阱?

上下文为什么需要它:我设计了一个数据库模型,它将用于不同供应商数据库的许多实例。每个数据库中的模式都保持不变,但不同的供应商有不同的数据量。因此,很少有小型供应商最终可能会在其表中包含少量数据(<1 000 000)。我不能让自己为行存储和列存储模型保留两个不同的数据库。

columnstore sql-server-2017
  • 2 个回答
  • 593 Views
Martin Hope
rdguam
Asked: 2020-10-19 16:22:59 +0800 CST

二进制日志记录是否适用于 ColumnStore?

  • 0

启用二进制日志时,MariaDB 的二进制日志是否还会记录 ColumnStore 事件,而不仅仅是 InnoDB 事件?例如,它是否记录对 ColumnStore 表行所做的更新?

我搜索了 MariaDB 文档,它没有提到二进制日志记录是否仅适用于某些(但不是全部)存储引擎。二进制日志记录是否独立于使用的存储引擎?

mariadb columnstore
  • 1 个回答
  • 32 Views
Martin Hope
Adgezaza
Asked: 2020-08-12 11:18:34 +0800 CST

具有多个 OR 语句的查询的行与列 DB

  • 3

我了解列式数据库非常适合不使用很多字段进行查找的快速查询,但是如果您只使用 OR 语句怎么办?

例如,我想要所有具有 (Val A, Col A) OR (Val B, Col B) OR (Val C, Col C) OR...(Val N, Col N) 的记录

我希望我问的很清楚。

编辑:

查询 OR 语句看起来A = 1 OR B = 3 OR C = 6 ... OR N = 7

我这样做的原因是我会有一个行/记录,其中每个 col/字段都被加密,并且我希望所有与任何字段匹配的记录都可以进行聚类练习。这个查询每秒可以运行 100 次。

columnstore query-performance
  • 1 个回答
  • 191 Views
Martin Hope
crokusek
Asked: 2020-06-02 14:36:34 +0800 CST

如何控制非聚集列存储索引上的分段最小/最大 data_id

  • 5

给定一个没有 PK 但具有基于行的聚集索引的简单的基于行的表,如下所示:

create clustered index [CX_PropertyValue] ON [dbo].[PropertyValue] ([PropertyId], [Value])

然后我希望添加一个列存储索引,该索引的分段顺序与上面的聚集索引相同:

create nonclustered columnstore index CS_IX_PropertyValue on dbo.PropertyValue( 
    PropertyId, Value
)
with (drop_existing = on, maxdop = 1); -- maxdop=1 to preserve the order by property 

保留订单的 MaxDop 提示来自:这里

然后使用以下查询报告 PropertyId 列的最小/最大 data_id,并报告 7 个段中的每一个段的完整范围:

create view [Common].[ColumnStoreSegmentationView]
as
/*---------------------------------------------------------------------------------------------------------------------
    Purpose: List ColumnStore table segment min/max of columns.

     Source: https://joyfulcraftsmen.com/blog/cci-how-to-load-data-for-better-columnstore-segment-elimination/
             https://dba.stackexchange.com/a/268329/9415

    Modified    By            Description
    ----------  ----------    -----------------------------------------------------------------------------------------
    2020.06.02  crokusek/inet Initial Version 
  ---------------------------------------------------------------------------------------------------------------------*/
select --top 20000000000
       s.Name as SchemaName, 
       t.Name as TableName,
       i.Name as IndexName,
       c.name as ColumnName,
       c.column_id as ColumnId,
       cs.segment_id as SegmentId,
       cs.min_data_id as MinValue,
       cs.max_data_id as MaxValue
  from sys.schemas s
  join sys.tables t
    on t.schema_id = s.schema_id
  join sys.partitions as p  
    on p.object_id = t.object_id   
  join sys.indexes as I
    on i.object_id = p.object_id
   and i.index_id = p.index_id
  join sys.index_columns as ic
    on ic.[object_id] = I.[object_id]
   and ic.index_id = I.index_id   
  join sys.columns c
    on c.object_id = t.object_id
   and c.column_id = ic.column_id
  join sys.column_store_segments cs
    on cs.hobt_id = p.hobt_id
   and cs.column_id = ic.index_column_id 
 --order by s.Name, t.Name, i.Name, c.Name, cs.Segment_Id
GO

我尝试使聚集索引唯一,这确实稍微影响了报告的范围,但仍然不是单调增加。

有任何想法吗?

这是一个以这种方式完成分割的链接,但我看不出有任何区别。

版本:Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)

sql-server columnstore
  • 1 个回答
  • 293 Views
Martin Hope
AAndrus
Asked: 2019-04-27 12:29:42 +0800 CST

将社会保险号存储为 Columnstore 的 DECIMAL(10,9)

  • 2

我正在处理一个非常大的数据库(10B + 行),该数据库对 SSN 和 BirthDate 执行匹配以尝试查找重复记录。该表正在使用列存储压缩(SQL SERVER 2016),我想到我可以将 SSN 保存为 DECIMAL(10,9) 以保留前导零而不是从 CHAR/VARCHAR 中获得性能损失。我只是想知道是否有人尝试过这个,或者是否有原因导致它无法按预期工作。我知道我可以转换为 INT 并只丢失前导零,但这对我来说似乎是一个更好的解决方案。

ISNULL(TRY_CAST('.' + SSN AS DECIMAL(10,9)),0) AS DecimalSSN

我总是可以将它转换回一个字符串RIGHT(TRY_CAST(DecimalSSN AS VARCHAR),9) AS SSN

sql-server columnstore
  • 1 个回答
  • 511 Views
Martin Hope
Devin
Asked: 2019-04-18 07:59:47 +0800 CST

大型矩阵/超宽表的数据库解决方案

  • 2

假设我有这两个数据框(简化了我的问题):

用户

+---------+
| user_id |
+---------+
| 1       |
| 2       |
| ...     |
+---------+

文章

+------------+------------+
| article_id |    date    |
+------------+------------+
| a          | 2019-01-01 |
| b          | 2018-03-03 |
| ...        |            |
+------------+------------+

还有一个用户-文章对的密集矩阵,其中每个值是我预测每个用户想要阅读每篇文章的程度(从 0 到 1):

+-----+------+------+-----+
|     |  1   |  2   | ... |
+-----+------+------+-----+
| a   | 0.54 | 0.99 | ... |
| b   | 0    | 0.7  | ... |
| ... | ...  | ...  | ... |
+-----+------+------+-----+

我有一个网络应用程序需要做一些事情,比如返回给单个用户最推荐的 10 篇文章,或者给定日期范围内第 11 到 20 篇最推荐的文章等:

query: (user_id=123) AND (news_date IN ('2019-04-01', '2019-05-01')) LIMIT 10 OFFSET 10

+---------+-------+------+
| news_id | score | rank |
+---------+-------+------+
| g       | 0.98  | 11   |
| d       | 0.97  | 12   |
| ...     | ...   | ...  |
| q       | 0.8   | 20   |
+---------+-------+------+

挑战在于我的用户和文章数以万计,因此由于列限制,我不能将矩阵存储为 Postgres 表。

我可以将 Postgres 中的推荐分数存储在一个表中(user_id, article_id, score),这样查询起来会很快,但是这个表会有 100M+ 行并且更新成本很高,我每天都会这样做。

我目前的解决方案是将单个数据帧(news_id, news_date, user_1_score, user_2_score, ..., user_n_score)作为 gzipped Parquet 文件存储在磁盘上,加载news_date和user_x_score列,然后过滤、排序和切片。唯一的缺点是我的网络主机有一个临时文件系统,所以这个文件需要在应用程序启动时下载。至少在 Web 请求期间获取数据的速度足够快。

我对列式数据存储了解不多,但我觉得其中一种产品可能对我的问题有好处。有人有想法吗?

database-design columnstore
  • 3 个回答
  • 717 Views
Martin Hope
Neil P
Asked: 2018-02-21 04:14:06 +0800 CST

select 以批处理模式运行,但 CTAS 以行模式运行

  • 1

我有相同的查询,当作为选择语句运行时显示为以批处理模式运行,但当相同查询是 CTAS 操作的选择部分时显示为行模式。两个表(加上结果表)都是分布对齐的。

为什么是这样?显然,如果可能的话,我希望它以批处理模式运行。

导致行模式执行:

create table mytable1
with
(
    distribution = hash(c1)
)
as

询问:

with  filterData as 
(
    select 
        a
        ,b
        ,c
        ,d
        ,DateStamp
    from [DW_reporting].[table1] 
    where num > 0
)

    select 
        p.[DateStamp]
        ,p.[a1]
        ,p.b1
        ,p.c1
        ,p.d1
        ,e.a
        ,e.b
        ,case when e.d is not null then 1 else 0 end as Flag
    from SOmeOtherTable p
    left join filterData e on e.a = p.a1
                                            and e.c = p.c1
                                            and e.DateStamp < p.DateStamp       
azure-sql-data-warehouse columnstore
  • 1 个回答
  • 52 Views
Martin Hope
TimBrown
Asked: 2018-02-14 02:43:52 +0800 CST

我可以人为地限制 SQL Server 中的 Columnstore 缓存大小吗?

  • 3

我正在尝试评估数据科学工作负载在大型数据集 (~200GB) 上的潜在性能。我们在 SQL Server 2017 中使用列存储索引取得了出色的结果。

然而,企业对节省成本很感兴趣,我已经向他们指出,列存储索引现在在标准版中可用,尽管内存限制为 32GB。可以通过查看 DMV sys.dm_column_store_object_pool来确定当前内存使用情况

我想知道是否可以限制列存储专用 RAM 分配以评估工作负载性能如何变化。

我知道可以限制 SQL Server 中的总 RAM 使用量,但这不会提供非常具体的列存储限制的真实指示。

我应该澄清一下,由于我们目前使用的是 Developer Edition,因此根本没有资源限制。

sql-server columnstore
  • 2 个回答
  • 187 Views
Martin Hope
Neil P
Asked: 2017-06-20 06:34:45 +0800 CST

为什么我的列存储索引没有填满整个行组?

  • 2

我正在使用[vColumnstoreDensity]它来监视我的列存储索引的运行状况。

我注意到我有一个看起来很奇怪的索引。

据我了解,列存储索引将在开始下一个行组之前填充一个行组。为了获得最佳索引性能,更完整的行组更好。

说了这么多之后,我有一张表格我很难理解。即使在使用最大资源类重建索引(为构建过程提供可能的最大内存量)之后,[vColumnstoreDensity]视图仍将此索引显示为分布在许多部分完整的行组中。

COMPRESSED_rowgroup_count

4936

COMPRESSED_rowgroup_rows

2693512978

COMPRESSED_rowgroup_rows_MIN

468

COMPRESSED_rowgroup_rows_MAX

739443

COMPRESSED_rowgroup_rows_AVG

545687

编辑:

这是聚集列存储索引。

index columnstore
  • 1 个回答
  • 269 Views
Martin Hope
loliver
Asked: 2015-06-25 06:35:20 +0800 CST

构建 ColumnStore 索引会占用系统资源

  • 2

我正在试验 columnstore,我发现在构建进程时会占用所有系统资源。我有一个包含 23 亿行的表,当我在其上构建列存储时,所有其他查询都完全停止。有没有办法限制列存储构建使用的资源量,以便我的其他查询可以继续运行。其他查询不涉及此表。

sql-server columnstore
  • 1 个回答
  • 218 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve