为了加快CREATE INDEX
操作速度,我将work_mem
和 设置为 8,当我在表上max_parallel_maintenance_workers
创建索引时,它按预期工作。B-tree
除了主要工作人员之外,我还看到了 7 个并行工作人员。但是当我开始在同一个表上创建Hash
索引时,我发现唯一的工作线程仅使用 1 个 cpu 核心。
我是否应该更改一些特殊选项以获得与创建 B 树索引时相同的结果?
为了加快CREATE INDEX
操作速度,我将work_mem
和 设置为 8,当我在表上max_parallel_maintenance_workers
创建索引时,它按预期工作。B-tree
除了主要工作人员之外,我还看到了 7 个并行工作人员。但是当我开始在同一个表上创建Hash
索引时,我发现唯一的工作线程仅使用 1 个 cpu 核心。
我是否应该更改一些特殊选项以获得与创建 B 树索引时相同的结果?
我已经TABLOCK
编辑了一个表,这样我就可以运行批量插入。当它仍处于锁定状态时我如何读取它?
在正常情况下,我认为这显然是不可能的。幸运的是,有一个关键因素导致情况变得不正常。在这种情况下,我根本不关心 ACID。我唯一关心的是不要取消已TABLOCK
编辑表的查询。
我已经尝试过WITH (NOLOCK)
,但迹象表明它不起作用。我是在要求不可能的事情吗?
只是为了说明这一点,假设我正在跑步
INSERT [dbo].[Table1] WITH (TABLOCK)
SELECT * FROM [A_Lot_Of_Rows]
Table1
我的目标是在运行时进行查询。
我正在进行批量插入,并且在它们运行时,我决定要检查一些细节。我不在乎从哪一行得到所述详细信息。
中的每一行A_Lot_Of_Rows
都有一个日期。A_Lot_Of_Rows
被我的存储过程截断,并在再次截断之前以基于日期的批次重新填充。通过读取表中的任意行,我可以知道我所在的批次。
我在MySQL中使用root用户登录,并且服务器已经加固,所以设置了这个参数default-authentication-plugin=caching_sha2_password
,并且这是我目前唯一的用户。
出现以下错误:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
我有一个巨大的表,假设有 500,000 行。我想将其(架构和数据)从一台服务器复制到另一台服务器。这不是更新插入或任何类型的更新;这是一次性的直接复制和粘贴。对此的惯用方法是什么?
我试过了:
无需向对象的所有者(通常是创建该对象的用户)授予权限,因为所有者默认拥有所有权限。(但是,为了安全起见,所有者可以选择撤销自己的一些特权。)
现在我有一个带有所有者用户的数据库表,但ERROR: permission denied for table alert
每当我尝试从此表中进行选择时,我都会收到:
database=# SET ROLE user;
SET
database=> select * from pg_tables where tablename = 'alert';
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
------------+-----------+--------------------+------------+------------+----------+-------------+-------------
public | alert | user | | t | f | f | f
(1 строка)
database=> select * from alert limit 1;
ERROR: permission denied for table alert
为什么是这样?
没有额外的表权限:
database=> \z Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+------------------------------------+----------+-------------------+-------------------+----------
public | alert | table | | |
此外,架构和数据库所有者已更改为用户。
为了解决这个问题,我必须这样做GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user;
,然后一切正常。
因此,重申一个问题:所有者怎么可能无法从表中进行选择?是的,我确实运行了REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM user;
,但我希望这会将权限重置为默认值,并且我的假设可能是错误的。但是,我怎样才能知道我的权限不再是默认的呢?如果我查看\z
输出,一切看起来都像之前的GRANT
/一样REVOKE
。另外,看看其他数据库,我的 select 没有问题,我没有看到\z
. 经过大量谷歌搜索后,我发现\l
输出(我想\z
)没有显示默认值。但是我怎样才能找到这个默认值呢?\ddp
输出为空,我在这里迷路了:(
预先感谢您的任何帮助。
首先,如果我在 DBA 领域的知识非常有限,我想说声抱歉,因为我和其他几个团队成员刚刚获得这个项目,因为我们的资源非常有限。
给出的任务是从 2014 年到 2017 年升级多个 SQL Server 实例,并将一些实例升级到 2022 年,因为明年 EOS 即将到来。该范围还将多个数据库合并到一个实例中。我们已经制定了如何执行它的计划,但我们需要一些验证来确定此步骤是否正确,并获取一些有关部署的意见和建议。
预升级
升级
升级后
可能使用的替代方法
局限性
这就是目前的游戏计划,有什么建议或建议吗?有什么我们错过的吗?有什么需要注意的吗?有更好的方法吗?
我们处理此类任务的经验非常有限,因此我们非常担心事情会向南发展。当然,我们会事先测试这一点,甚至在升级开发之前,以确保一切都尽可能顺利。
非常非常感谢你。
我有 2 个计算存储桶列的数据,我想用 PIVOT 查询进行总结。这是一组预先生成的数据示例。我这里的存储桶列是 sec 和 pct。
select '1' id, 'a' cat, 'lt_1_sec' sec, 'lt_25_pct' pct from dual
union all
select '2', 'a' cat, 'lt_1_sec', 'lt_25_pct' from dual
union all
select '3', 'a' cat, 'lt_2_sec', 'lt_25_pct' from dual
union all
select '4', 'a' cat, 'lt_2_sec', 'lt_50_pct' from dual
union all
select '5', 'a' cat, 'lt_2_sec', 'lt_50_pct' from dual
union all
select '6', 'a' cat, 'lt_2_sec', 'lt_75_pct' from dual
输出应该是这样的
猫 | lt_1_秒 | lt_2_秒 | lt_25_pct | lt_50_pct | lt_75_pct |
---|---|---|---|---|---|
A | 2 | 4 | 3 | 2 | 1 |
我想独立地关注 sec 和 pct 的值。我可以使用枢轴子句来完成此操作,或者使用所有 sec 值按所有 pct 值进行排列,但不能同时独立地完成此操作。
我尝试过多个pivot子句,它会创建一些意外的行为,pivot-for子句中的多个值,它创建所有值的排列,以及多个聚合函数,它仅在单个列上执行多个聚合选项。
具有多个主元子句的非功能示例(返回的数据不正确):
with dummy_data as (
select cat, sec, pct
from (
select '1' id, 'a' cat, 'lt_1_sec' sec, 'lt_25_pct' pct
from dual
union all
select '2', 'a' cat, 'lt_1_sec', 'lt_25_pct'
from dual
union all
select '3', 'a' cat, 'lt_2_sec', 'lt_25_pct'
from dual
union all
select '4', 'a' cat, 'lt_2_sec', 'lt_50_pct'
from dual
union all
select '5', 'a' cat, 'lt_2_sec', 'lt_50_pct'
from dual
union all
select '6', 'a' cat, 'lt_2_sec', 'lt_75_pct'
from dual
)
),
dummy_pvt as (
select *
from dummy_data pivot (count(*) for (sec) in ('lt_1_sec' as lt_1_sec,
'lt_2_sec' as lt_2_sec)) pivot (count(*) for (pct) in ('lt_25_pct' as lt_25_pct,
'lt_50_pct' as lt_50_pct,
'lt_75_pct' as lt_75_pct))
)
select cat, sum(lt_1_sec), sum(lt_2_sec), sum(lt_25_pct), sum(lt_50_pct), sum(lt_75_pct)
from dummy_pvt
group by cat;
猫 | 总和(LT_1_SEC) | 总和(LT_2_SEC) | 总和(LT_25_PCT) | 总和(LT_50_PCT) | 总和(LT_75_PCT) |
---|---|---|---|---|---|
A | 2 | 4 | 1 | 1 | 1 |
具有多个主元值的非功能示例二(不应产生所有值组合的排列)
with dummy_data as (
select cat, sec, pct
from (
select '1' id, 'a' cat, 'lt_1_sec' sec, 'lt_25_pct' pct
from dual
union all
select '2', 'a' cat, 'lt_1_sec', 'lt_25_pct'
from dual
union all
select '3', 'a' cat, 'lt_2_sec', 'lt_25_pct'
from dual
union all
select '4', 'a' cat, 'lt_2_sec', 'lt_50_pct'
from dual
union all
select '5', 'a' cat, 'lt_2_sec', 'lt_50_pct'
from dual
union all
select '6', 'a' cat, 'lt_2_sec', 'lt_75_pct'
from dual
)
)
select *
from dummy_data pivot (count(*) for (sec, pct) in (
('lt_1_sec', 'lt_25_pct') as lt_1_25,
('lt_1_sec', 'lt_50_pct') as lt_1_50,
('lt_1_sec', 'lt_75_pct') as lt_1_75,
('lt_2_sec', 'lt_25_pct') as lt_2_25,
('lt_2_sec', 'lt_50_pct') as lt_2_50,
('lt_2_sec', 'lt_75_pct') as lt_2_75));
猫 | LT_1_25 | LT_1_50 | LT_1_75 | LT_2_25 | LT_2_50 | LT_2_75 |
---|---|---|---|---|---|---|
A | 2 | 0 | 0 | 1 | 2 | 1 |
具有多个聚合函数的非功能示例三(仅为 sec 值创建列)
with dummy_data as (
select cat, sec, pct
from (
select '1' id, 'a' cat, 'lt_1_sec' sec, 'lt_25_pct' pct
from dual
union all
select '2', 'a' cat, 'lt_1_sec', 'lt_25_pct'
from dual
union all
select '3', 'a' cat, 'lt_2_sec', 'lt_25_pct'
from dual
union all
select '4', 'a' cat, 'lt_2_sec', 'lt_50_pct'
from dual
union all
select '5', 'a' cat, 'lt_2_sec', 'lt_50_pct'
from dual
union all
select '6', 'a' cat, 'lt_2_sec', 'lt_75_pct'
from dual
)
)
select *
from dummy_data pivot (count(sec) sec_cnt, count(pct) pct_cnt for (sec) in (
('lt_1_sec') as lt_1_sec,
('lt_2_sec') as lt_2_sec));
猫 | LT_1_SEC_SEC_CNT | LT_1_SEC_PCT_CNT | LT_2_SEC_SEC_CNT | LT_2_SEC_PCT_CNT |
---|---|---|---|---|
A | 2 | 2 | 4 | 4 |
难道真的没有办法在同一查询中对不同的值集执行多个透视而不排列值吗?
团体 | 枢轴_1_a | 枢轴_1_b | 枢轴_2_x | 枢轴_2_y | 枢轴_2_z | ||
---|---|---|---|---|---|---|---|
A | cnt_a | cnt_b | cnt_x | cnt_y | cnt_z |
其中 A+B = X+Y+Z = count()
我有一个表,其中列中有一组 URL urls
。现在需要更新一些更改主机名的 URL。例如:
{https://storage.host1.com/file.jpg, https://storage.host1.com/file2.jpg}
应该变成:
{https://data.newhost.net/file.jpg, https://data.newhost.net/file2.jpg}
陷入数组元素字符串替换。
我有以下表格
-- Create the #product table
CREATE TABLE #product
(
id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
name VARCHAR(100),
createdDate DATE
);
-- Create the #tmpproducts table
CREATE TABLE #tmpProducts
(
rownum INT PRIMARY KEY IDENTITY(1,1),
name VARCHAR(100),
createdDate DATE
);
-- Insert data into #tmpSignings
INSERT INTO #tmpProducts (name, createdDate)
VALUES
('John Doe', '2023-11-22'),
('Jane Smith', '2023-11-23'),
('Alice Johnson', '2023-11-24'),
('Bob Williams', '2023-11-25'),
('Eva Brown', '2023-11-26'),
('Michael Davis', '2023-11-27'),
('Sophia Miller', '2023-11-28'),
('William Wilson', '2023-11-29'),
('Olivia Jones', '2023-11-30'),
('Daniel White', '2023-12-01');
我在 #tmpProducts 中有 10 行,我的目标是将这些行插入到 #product 表中。对于成功插入到产品表中的每一行,我需要将新生成的 ID 关联回 #tmpProducts 表中相应的 rownum。我怎样才能做到这一点?任何帮助是极大的赞赏。谢谢你!
预期输出:
一些查询对我的 CPU 的影响非常严重。sp_WhoIsActive
报告这sp_OAMethod
就是原因(该sql_text
列指向它)并且它具有PREEMPTIVE_OS_GETPROCADDRESS
等待类型的巨大等待。鉴于这sp_OAMethod
是一个内置存储过程,我该如何调试它?
我使用的是 2019 版本的 SQL Server,15.0.something。