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 / 问题

全部问题(dba)

Martin Hope
J. Mini
Asked: 2025-04-30 02:19:23 +0800 CST

OPTIMIZE FOR UNKNOWN 对表值变量/参数有什么作用吗?

  • 11

我有一个查询,它既容易受到参数敏感性的影响,又受表值参数的影响。我很懒,只想用查询提示来解决这个问题。当我懒惰的时候,我可以用 来解决参数敏感性问题OPTION (OPTIMIZE FOR UNKNOWN)。这给了我三个非常紧密相关的问题:

  1. 对表值变量OPTION (OPTIMIZE FOR UNKNOWN)有影响吗?
  2. 对表值参数OPTION (OPTIMIZE FOR UNKNOWN)有影响吗?
  3. 除了 之外,还有哪些查询提示OPTION(RECOMPILE)可用于影响表值参数的基数估计?

我自己的实验和文档都表明,这根本没用。表值参数很容易被参数嗅探,但嗅探到的只是基数,所以OPTION (OPTIMIZE FOR UNKNOWN)应该什么也不做。

至于使用其他表提示的问题,我知道我可以更改对表值参数的操作的估计(例如OPTION (USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES')),但我不认为提示可以影响参数本身的基数估计。

sql-server
  • 1 个回答
  • 204 Views
Martin Hope
Martin Smith
Asked: 2025-04-27 05:41:16 +0800 CST

SQL Server 如何维护行数元数据?

  • 14

对于行存储表的示例...

CREATE TABLE T(Id INT PRIMARY KEY, C1 INT NULL, C2 INT NULL);

有多种不同的方法可以从 SQL Server 中的元数据中检索表行数 - 例如以下方法

SELECT SUM(rows) 
FROM sys.partitions
WHERE object_id = object_id('dbo.T') AND index_id <= 1;

SELECT SUM(row_count) 
FROM sys.dm_db_partition_stats
WHERE object_id = object_id('dbo.T') AND index_id <= 1;

SELECT SUM(rows)
FROM sys.sysindexes
WHERE id = object_id('dbo.T') AND indid <= 1;

SELECT OBJECTPROPERTYEX(object_id('dbo.T'), 'Cardinality') 

执行计划显然显示了正在使用的各种不同对象 - 例如下面的。

  • sysrowsets OUTER APPLY OpenRowset(TABLE ALUCOUNT
  • sysidxstats 交叉应用 OpenRowSet(表分区计数
  • sysidxstats i 交叉应用 OpenRowSet(TABLE INDEXPROP

这是怎么回事?SQL Server 真的在多个地方维护这些元数据吗?如果是这样,哪种方法最可靠?

sql-server
  • 2 个回答
  • 276 Views
Martin Hope
swe
Asked: 2025-04-25 14:45:34 +0800 CST

未从配置文件设置 random_page_cost

  • 7

如果我在 postgresql.conf 中设置random_page_cost = 1.1,它不会被设置,重启后也不会,之后也不会select pg_reload_conf();。
但是,如果我在创建新集群之前将它放入配置文件中,它就会被设置。

如果我通过更新它ALTER SYSTEM SET random_page_cost = 1.1; select pg_reload_conf();,它设置正确。

有人可以指导我如何找出原因吗?

(我已经开始-d 5,希望在启动日志中找到一些有趣的东西,为什么该值被忽略,但我什么也没找到。

提前致谢。

问候,
斯蒂芬

postgresql
  • 1 个回答
  • 66 Views
Martin Hope
PTL_SQL
Asked: 2025-04-23 17:04:03 +0800 CST

SQL Server 分布式可用性组的故障转移

  • 6

按照SQL Server DAG 的手动故障转移中的步骤操作

要验证两个可用性组是否已准备好进行故障转移,请使用以下在 SQLCMD 模式下运行的 T-SQL 查询:

:CONNECT TDPRD071  
SELECT ag.name, drs.database_id, db_name(drs.database_id) as database_name,  
       drs.group_id, drs.replica_id, drs.last_hardened_lsn  
FROM sys.dm_hadr_database_replica_states drs  
INNER JOIN sys.availability_groups ag ON drs.group_id = ag.group_id;

:CONNECT TDDR071  
SELECT ag.name, drs.database_id, db_name(drs.database_id) as database_name,  
       drs.group_id, drs.replica_id, drs.last_hardened_lsn  
FROM sys.dm_hadr_database_replica_states drs  
INNER JOIN sys.availability_groups ag ON drs.group_id = ag.group_id;

如文章中所示,从全局主节点运行上述查询的结果屏幕截图显示了与 DAG 中每个 AG 的连接。

但是,当我在 DAG 的全局主节点上运行查询时,得到的结果仅来自与转发器的连接。因此,显示的两组结果仅来自与 AG02 的连接。

但是,如果我单独运行这两个查询(均来自全局主数据库),它们将根据情况正确连接到 AG01 或 AG02。

请问您有什么建议可以解释我为什么会出现这种行为吗?

谢谢。

sql-server
  • 1 个回答
  • 19 Views
Martin Hope
Matt F.
Asked: 2025-04-20 11:40:51 +0800 CST

在两个不同位置使用 2 个 mysql 服务器的最佳设置是什么?

  • 8

我们目前有一台运行在 Oracle Linux 上的 MySQL 8 服务器。它运行在德克萨斯州一个托管数据中心的虚拟机上。

大约 95% 的时间花在 SELECT 操作上,大约 5% 的时间花在 INSERT 和 UPDATE 上。

我们正在努力在单独的位置(MO)添加另一个 mysql 服务器,主要是为了实现冗余和灾难恢复目的。

我的想法是,在两个位置之间建立一个隧道,并使用主位置作为主服务器来设置 MySQL 复制。这样,如果发生灾难,我可以切换到从服务器。但有一个缺点,那就是除非发生意外,否则这台专用的从服务器就一直闲置在那里,可能没有任何好处。

我正在考虑如何利用它,也许更新我的应用程序以使用从属服务器来处理一些繁重的查询/报告。

我原本以为这是一个很棒的计划,直到我开始阅读有关 MySQL 集群的文章。我们实在没有办法搭建集群所需的第三台专用 MySQL 服务器。

我的问题是:

假设您在 2 个位置有 2 个 mysql 节点,您将如何最好地利用它们?

我们的应用服务器所有东西都在 Docker 容器中运行。为了构建 MySQL 集群而不是复制,在应用服务器中添加一个 MySQL 实例(在 Docker 容器中)会不会是个疯狂的想法?

如果集群确实可行(通过应用服务器上的 MySQL 实例),我的理解是写入速度可能会变慢,因为写入操作要等到集群中所有节点都写入完毕才能完成?这可能意味着,如果集群节点分布在多个位置,写入速度会显著降低,因为两个站点之间会存在一些延迟?

任何建议都将受到赞赏。

mysql
  • 1 个回答
  • 33 Views
Martin Hope
Primordial_Hamster
Asked: 2025-04-19 00:50:12 +0800 CST

区域设置具体起什么作用?有没有办法测试不同区域设置的效果?

  • 8

我可能需要更改 Postgresql 配置中 lc_messages、lc_monetary、lc_numeric 和 lc_time 的区域设置。但是,在执行此操作之前,我需要了解它们具体会影响哪些内容。Postgresql 文档列出了受影响的内容,但仍然留下了很多问题。例如,文档中说upper和lower函数会受到影响。这是所有设置都受影响吗?还是只有部分设置受影响?文档中还说 to_char() 会受到影响。具体是如何影响的?

我想提前知道此更改是否需要更改应用程序代码,那么是否有好的资源可以帮助我生成要测试的功能/场景列表?

postgresql
  • 1 个回答
  • 29 Views
Martin Hope
Manuel Jordan
Asked: 2025-04-19 00:46:38 +0800 CST

MySQL:为什么“use”命令不需要执行“;”?

  • 10

在 MySQL 8 服务器社区版中,下面是SQL查询和命令MySQL Shell的示例:

SELECT * FROM planet;
DESC planet;
SHOW DATABASES;
SHOW tables;

正如您所见,必须在句子末尾声明;字符(或\g根据情况声明字符)。\G

但我确实错误地意识到,无需执行use命令即可更改数据库。 ;

因此,下面两个命令可以和平地工作:

use <datababase>
use <datababase>;

只是好奇:

问题

  • 为什么use命令不需要;执行?

老实说,我不确定这是否是这种情况下的独特命令,但为什么它与其他命令不同?

mysql
  • 3 个回答
  • 710 Views
Martin Hope
adam.g
Asked: 2025-04-18 21:28:11 +0800 CST

SNAPSHOT ISOLATION 如何工作?

  • 7

我找不到有关其SNAPSHOT ISOLATION功能的详细信息。我在 SQL Server 2019 上测试了以下查询(禁用了 ADR):

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
BEGIN TRAN;
WAITFOR DELAY '00:00:20'; -- insert of one record to dbo.MARA_CT in different session
SELECT
    *
FROM dbo.MARA_CT AS mc;
WAITFOR DELAY '00:00:20'; -- insert of one record to dbo.Album in different session
SELECT
    *
FROM dbo.Album AS a;
WAITFOR DELAY '00:00:20';
SELECT
    *
FROM dbo.MARA_CT AS mc;
SELECT
    *
FROM dbo.Album AS a;
COMMIT;

正如评论中所述,我在 中插入了一行,dbo.MARA_CT而在第二个 中WAITFOR DELAY,我在 中插入了一条记录dbo.Album。根据Microsoft文档:

The term "snapshot" reflects the fact that all queries in the transaction see the same version, or snapshot, of the database, based on the state of the database at the moment in time when the transaction begins.

我的查询得到的结果如下:

  1. dbo.MARA_CT 包含在第一个 WAITFOR DELAY‘00:00:20’期间插入的记录。
  2. dbo.Album 不包含在第二个 WAITFOR DELAY‘00:00:20’期间插入的记录。

在我看来,查询中任何表的“首次接触”都会为整个事务创建一个“快照”,而不是捕获事务开始时数据库的状态。关于SNAPSHOT ISOLATION,我还有其他问题:

  1. SNAPSHOT ISOLATION 会存储数据库中所有行从事务开始的所有版本,还是仅存储查询中使用的表的版本?这是如何工作的?

  2. 如果启用了 RCSI,并且我们随后启用了 SNAPSHOT ISOLATION,SQL Server 是否会在 tempdb 中存储任何新值/版本?

  3. 在我的案例中,使用数据库快照的目的SNAPSHOT ISOLATION是测试新版本的过程和视图(新模式)。即使涉及的表不断进行插入、更新和删除操作,新旧过程都需要返回相同数量的记录并使用相同的数据。我曾考虑使用数据库快照,但现在发现它SNAPSHOT ISOLATION可能更有优势,因为数据库上已经启用了 RCSI。

sql-server-2019
  • 1 个回答
  • 142 Views
Martin Hope
Manuel Jordan
Asked: 2025-04-18 11:31:38 +0800 CST

MySQL:如何导出非 SQL 查询语句的输出?

  • 9

在 MySQL 8 服务器社区中,可以执行MySQL Shell以下命令导出 SQL 查询的输出(最基本的):

SELECT * FROM cientifico INTO OUTFILE '/var/lib/mysql-files/cientifico-data.txt';

并且它按预期工作

但对于非 SQL 查询如下:

SHOW PROCESSLIST INTO OUTFILE '/var/lib/mysql-files/processlist.txt';

引发以下错误

错误 1064 (42000):您的 SQL 语法有错误;请查阅与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行附近“INTO OUTFILE '/var/lib/mysql-files/processlist.txt'”使用的正确语法

相同于:

SHOW DATABASES INTO OUTFILE '/var/lib/mysql-files/databases.txt';

给予

错误 1064 (42000):您的 SQL 语法有错误;请查阅与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行附近“INTO OUTFILE '/var/lib/mysql-files/databases.txt'”使用的正确语法

因此如果可能的话

问题

  • 如何导出非 SQL 查询语句的输出?

我假设该INTO OUTFILE语法仅适用于 SQL 语句,但对于非 SQL 语句呢?

mysql
  • 2 个回答
  • 134 Views
Martin Hope
altink
Asked: 2025-04-18 05:47:19 +0800 CST

SQL Server 上次启动日期

  • 6
这个问题从 Stack Overflow迁移过来,因为它可以在数据库管理员 Stack Exchange 上找到答案。 迁移时间: 5 天前。

根据我在网上以及本网站找到的信息,我尝试了以下所有方法(1-5)来检索 SQL Server 的最后启动日期:

SELECT 0 as Id, SYSDATETIME() as DT
union
SELECT 1, sqlserver_start_time FROM sys.dm_os_sys_info  
union
SELECT 2, login_time FROM sys.dm_exec_sessions WHERE session_id = 1
union
SELECT 3, start_time from sys.traces where is_default = 1
union
SELECT 4, crdate FROM sysdatabases WHERE name='tempdb'
union
SELECT 5, create_date FROM sys.databases WHERE name = 'tempdb'

结果是:

0   2025-04-17 23:38:26.9364166
1   2025-04-13 19:09:42.2000000
2   2025-04-13 19:09:44.3166667
3   2025-04-13 19:09:46.5600000
4   2025-04-13 19:09:51.0900000
5   2025-04-13 19:09:51.0900000

问题:我一小时前刚启动了机器(以及随之启动的 SQL Server)。我预期的应该是 2025-04-17 22:38……,而不是 2025-04-13 19:09……。

该 SQL 服务器安装在 VMware 盒中。

在另一个 SQL Server 中,相同的版本和版本,我得到了正确的结果:

Id  DT
0   2025-04-18 14:34:49.3442637
1   2025-04-18 14:34:03.4333333
2   2025-04-18 14:34:05.1233333
3   2025-04-18 14:34:09.7400000
4   2025-04-18 14:34:14.6100000
5   2025-04-18 14:34:14.6100000

我不明白为什么虚拟机中的结果会出错。我每次工作时都会启动和关闭主机和虚拟机。

我这里遗漏了什么吗?

  • SQL Server 开发版 2019
sql-server
  • 1 个回答
  • 129 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