小编Pau*_*ite的帖子

PostgreSQL 在技术上如何将小表“保存在 RAM 中”?

我曾经问过性能问题,人们会告诉我 PostgreSQL 自动将足够小的表完全保存在 RAM 中,以免给 HDD 带来压力,从而实现“小表”的超快读写,即很少更容易适合可用 RAM(或分配给 PG 的内容)的行。

这对我来说很有意义,让我很高兴,因为我可以在并行运行的脚本之间有效地进行通信,而不会给我可怜的 HDD/SSD 带来压力并堵塞所有资源。

但后来我突然想到:这怎么可能?PG 怎么可能将一个表全部保存在 RAM 中,无论它有多小,而不会丢失数据完整性?

如果它不是一直写入永久存储,如果突然断电,或者软件崩溃,或者在运行时发生其他一些灾难,它怎么可能恢复?我想得越多,这对我来说就越不重要。

我能想到的唯一答案是:不,它实际上并没有这样做。如果 PG 从不(或很少)将数据写入永久存储,我看不到任何可能的方式来避免丢失数据。

如果这是可能的,但只有在为表格或设置启用某种标志后,我才想知道该标志/设置。我想为仅包含“内部通信”数据的表启用此功能,该数据类型除了作为主动运行脚本的“公共数据存储”之外没有任何价值。

postgresql write-ahead-logging

0
推荐指数
2
解决办法
88
查看次数

在子查询中生成随机行顺序

我知道这里(和这里)的其他答案说要订购newid()。但是,如果我top 1在子查询中进行选择- 以便在外部查询中的每行生成随机选择 - 每次使用都会newid()产生相同的结果。

那是:

select *,
    (select top 1 [value] from lookupTable where [code] = 'TEST' order by newid())
from myTable
Run Code Online (Sandbox Code Playgroud)

...lookupTable.value在从 返回的每一行上产生相同的值myTable

我正在尝试从lookupTable. 那个表只有几行。在现实世界中,我想要update myTable set someColumn = ......一个随机lookupTable.value值,这样每一行都myTable设置了一个随机值,而不是生成一个随机值并将其分配给所有行。

sql-server random sql-server-2016

0
推荐指数
1
解决办法
383
查看次数

char 或 smallint 用于带有数字代码的列?

我的应用程序中有列的值始终为 4 位数字,例如“0100”或“1230”。示例之一可能是Merchant Category Code

暂时,我已经将这个列的类型设置为char (4). 我有很多这种类型的专栏。这些类型的列之一也包含在非聚集UNIQUE索引中。我想为这种类型的专栏建立一种方法。

通过在应用程序中添加或 添加到开头来使用char (4)或可能更好吗?smallint' '0

包含这些列的表已分区,将包含大约 3 亿条记录。UPDATE可能不会在这种类型的列上执行。它们也不会出现在WHERE(有时可能出现在临时报告中)。

我应该选择哪种数据类型?

它就像一个邮政编码,它可以是数字,但你必须存储前导零

确切地。我在考虑在性能方面什么是更好的方法。还必须考虑到,如果我将其存储为smallint,应用程序代码必须将其解析为字符串并添加前导零。

sql-server datatypes physical-design sql-server-2019

0
推荐指数
1
解决办法
222
查看次数

使用 ORDER BY 从 SELECT 创建 Azure Synapse 临时表

当我省略该ORDER BY子句时,或者如果我将其作为选择运行并省略创建表部分,我有以下语句,但我需要这两者来确保生成的密钥排序正确

有任何想法吗?

消息 104381​​,级别 16,状态 1,第 18 行
ORDER BY 子句在视图、CREATE TABLE AS SELECT、INSERT SELECT、SELECT INTO、内联函数、派生表、子查询和公用表表达式中无效,除非 TOP 或 FOR XML 是还指定。

CREATE TABLE #demo
WITH (DISTRIBUTION = ROUND_ROBIN)
AS
SELECT 
       ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS ID,
       schemas.name as [schema], 
       tables.name as [table], 
       columns.column_id as [ordinal],
       columns.name as [column],
       types.name as [type]
FROM SYS.COLUMNS
  inner join sys.types
          on  types.system_type_id = columns.system_type_id
  inner join sys.tables
          on  tables.object_id = columns.object_id
  inner join sys.schemas
          on  schemas.schema_id = tables.schema_id
order by …
Run Code Online (Sandbox Code Playgroud)

t-sql temporary-tables azure-synapse-analytics

0
推荐指数
1
解决办法
2800
查看次数

我们可以做一个特定 PostgreSQL 数据库的 PITR 吗

我是 PostgreSQL 的新手,所以如果我的问题听起来很愚蠢,请忽略。

想象一下,我们在 PostgreSQL 中有三个数据库,TRUNCATE一个小时前有人错误地在其中一个数据库上运行了一个命令。现在我们想单独为那个数据库做一个 PITR,因为只有一个数据库有问题。

在 PostgreSQL 中是否可以为一个特定的数据库执行 PITR 或者它只能在实例级别发生?

我阅读了持续存档和时间点恢复 (PITR)的文档。看起来它只能在实例级别完成(我猜我们在 PostgreSQL 世界中将实例称为“数据库集群”,我来自 SQL Server 世界)。

与普通文件系统备份技术一样,这种方法只能支持整个数据库集群的恢复,而不是一个子集。

如果 PITR 在 DB 级别是不可能的,那么 Prod DBA 如何处理这种情况?

还有最后一件事,我有一个带有多个数据库的测试服务器,如果 PITR 在数据库级别是可能的,那么请分享我的步骤,以便我可以自己测试它。

我主要对支持的 Postgres 版本感兴趣。我的测试服务器是 PostgreSQL 9.6.16。

postgresql restore

0
推荐指数
1
解决办法
52
查看次数

用标识列标识所有表

是否有我可以运行的查询来显示所有带有标识列的表?试图找出是否有任何基于身份的表,其当前身份接近 int32 或 int64 的上限。

sql-server identity sql-server-2014

0
推荐指数
1
解决办法
56
查看次数

DBCC CHECKDB 和 DBCC CHECKTABLE 在表级完整性检查上有什么具体区别吗?

我在其中一个数据库上运行 DBCC CHECKDB 时遇到了分配错误。它抛出以下错误:

消息 8947,级别 16,状态 1,第 5 行表错误:对象 ID 1277199566、索引 ID 1、分区 ID 720577176766669456、分配单元 ID 720577087666647328 的多个 IAM 页(类型 LOB 数据)包含间隔。IAM 页面 (1:425664) 和 (1:1422669)。

CHECKDB 在表“schemaName.tableName”(对象 ID 1277199566)中发现 1 个分配错误和 0 个一致性错误。CHECKDB 在数据库“databaseName”中发现 1 个分配错误和 0 个一致性错误。

奇怪的是,当我尝试在该表上运行 DBCC CHECKTABLE 时,它没有显示任何错误。此外,我尝试运行 CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS 选项,但没有出现任何错误。

根据 Microsoft 文档:

要对数据库中的每个表执行 DBCC CHECKTABLE,请使用 DBCC CHECKDB。

对于指定的表,DBCC CHECKTABLE 检查以下内容:

  • 索引、行内、LOB 和行溢出数据页正确链接。
  • 索引按正确的排序顺序排列。
  • 指针是一致的。
  • 每页数据合理,包括计算列。
  • 页面偏移是合理的。
  • 基表中的每一行在每个非聚集索引中都有一个匹配的行,反之亦然。
  • 分区表或索引中的每一行都在正确的分区中。
  • 使用 FILESTREAM 在文件系统中存储 varbinary(max) 数据时文件系统和表之间的链接级一致性

但正如我所看到的,相反的情况并非如此。我们不能只对一张表运行 CHECKTABLE 并为同一张表获得相同的结果。

在检查特定对象的完整性和一致性方面,是否有人拥有与这两个命令之间的差异相关的信息?

sql-server dbcc-checkdb sql-server-2016 dbcc-checktable

0
推荐指数
1
解决办法
34
查看次数

如何生成约束sql?

我正在寻找一种可以生成创建 SQL 的方法,例如SQL选择约束时的 PgAdmin 选项卡。(pg admin 是怎么做的?)

我想实现一个通用方法,可以在处理后删除并重新创建外键约束。

postgresql constraint scripting

0
推荐指数
1
解决办法
585
查看次数

使用户成为 SQL Server 管理员的权限是什么?

来自文档:确定有效的数据库引擎权限

SQL Server 管理员可以查看有关所有登录名和用户的信息。权限较低的用户通常只能看到有关他们自己身份的信息。

根据上述引用,使用户成为SQL Server 管理员的权限是什么?

sql-server permissions sql-server-2019

0
推荐指数
1
解决办法
49
查看次数

SSMS - SQL 执行计划

我是 SQL 执行计划的新手,我正在尝试了解更多有关它们的信息。

我有几个问题。

  1. SQL执行计划在内存中保留多长时间?如果我断开连接,下次就无法使用了?有什么办法可以改变这个吗?
  2. 我可以导出执行计划并在下次重新连接到 SQL Server 时将其加载到内存中以绕过查询优化器并节省时间吗?

sql-server execution-plan plan-cache

0
推荐指数
1
解决办法
177
查看次数