当 MySQL (InnoDB) 将整个表缓存到内存中并且该表中的一行或多行发生更改时,它会做什么?
在这种情况下,MySQL是否会修改内存中的缓存,还是会认为缓存脏,转储缓存的表数据,然后在下次查询时重新缓存该表?
当 MySQL (InnoDB) 将整个表缓存到内存中并且该表中的一行或多行发生更改时,它会做什么?
在这种情况下,MySQL是否会修改内存中的缓存,还是会认为缓存脏,转储缓存的表数据,然后在下次查询时重新缓存该表?
我有一个来自 PostgreSQL 15 的备份,我正在尝试将其导入到 PostgreSQL 16 中。版本之间的重大更改之一是“限制 CREATEROLE 的权限及其修改其他角色的能力”
以前,具有 CREATEROLE 权限的角色可以更改任何非超级用户角色的许多方面。此类更改(包括添加成员)现在要求请求更改的角色具有 ADMIN OPTION 权限。
这意味着以前的数据库转储有角色授予命令抛出错误。sql 是通过以下方式获得的pg_dumpall --roles-only
(--no-owner
没有效果):
GRANT role TO user1 GRANTED BY user0;
ERROR: permission denied to grant privileges as role "user0"
DETAIL: The grantor must have the ADMIN option on role "role".
我尝试过使用管理员授予角色,这样当我们将来尝试授予角色时就不会出现此问题,但它会使命令乱序,因此它们在恢复时仍然失败:
GRANT role TO user1 GRANTED BY user0;
GRANT role TO user2 GRANTED BY user0;
GRANT role TO user3 GRANTED BY user0;
GRANT role TO user0 WITH ADMIN OPTION GRANTED BY [me];
GRANTED BY
除了梳理 PostgreSQL 15 中的权限以便导入时没有问题之外,还有什么方法可以省略命令中的 或任何其他方法来解决此问题?
编辑:user0 已经是超级用户
Microsoft 维护着一份不良 DLL 列表。这是该列表中的一项(强调我的)
UMPPC*.DLL 和 SCRIPTCONTROL*.DLL
如果您为 CrowdStrike 防病毒/端点保护程序启用其他用户模式数据防护设置,这些 DLL 文件将加载到 SQL Server 相关进程的地址空间中。当 SQL Server 代理在执行作业时尝试创建新进程时,您可能会注意到失败。尝试启动 SQL Server Management Studio 时可能会遇到失败。您可能还会看到 SQL Server 无法启动 SQLDumper.exe 来生成内存转储。我们建议您联系 Crowdstrike 支持并提供与您的问题相关的信息,并询问是否有可用的修复程序。
我使用的是 SQL Server 2019 机器,并且有许多 UMPPC*.DLL 和 SCRIPTCONTROL*.DLL 文件。我正在考虑使用 SQL Server 代理来触发一些 SSISDB 包。但是,我不确定如何检查这些 DLL 是否引起问题。这给了我我的问题:当 UMPPC .DLL 和 SCRIPTCONTROL .DLL 触发 SSISDB 包时,SQL Server 代理中会导致出现哪些确切的错误消息?
我有一个 Percona 8 MySQL 服务器,通过 Docker 运行,充当频繁使用的服务的后备数据存储。整点时,将运行一个脚本,从大约 170 万行的虚拟列中读取一个值(表大小估计为 2.3 GiB),并将该特定值和关联的关键数据插入到系统仅读取的另一个表中。虚拟列是 JSON 查找json_extract(jsonData, '$.root.interestingValue')
并具有GENERATED
标志。其背后的想法是,当用户只对一些特定值感兴趣并且不需要检索绝对最新值时,对被视为实时且定期更新的表施加较小的压力。
查询如下(表/列已重命名)
CREATE TEMPORARY TABLE t1_cache_temp
SELECT
t2.id as uid,
t3.displayText as dt,
t2.virtualColumn as interestingValue
FROM liveTable t2
JOIN otherLiveTable t3 on t2.id = t3.id;
TRUNCATE TABLE t1_cache;
INSERT INTO t1_cache
SELECT uid, dt, interestingValue FROM t1_cache_temp;
DROP TEMPORARY TABLE t1_cache_temp;
该脚本花费的总时间为 47 秒。
虽然从 InnoDB 表读取数据并写入临时表没问题,但将其写入另一个 InnoDB 表会导致数据库上的所有其他操作在前几秒后挂起。INSERT INTO t1_cache...
我通过单独执行每个语句来将范围缩小到该语句。
我还尝试写入新的和完全未使用的表(也使用 InnoDB),这给出了相同的结果。在执行最后一次测试时,只有允许的最大连接数的 2% 正在使用中。此外,只有 48% 的 InnoDB 缓冲池正在使用。
如果我将表切换到 MyISAM,一切都会正常工作,不会出现中断或挂起的情况。此外,如果我删除临时表,无论 InnoDB 还是 MyISAM 引擎,都会导致相同的问题。
虽然使用 MyISAM 可能是更好的选择,但什么可能导致这种情况呢?在配置级别我可以做些什么吗?
我是新的 Apache Cassandra,我刚刚浏览了Apache Cassandra 的常见问题解答页面。我在答案中看到类似这样的句子:
请参阅
256
和43
了解更多血淋淋的细节。
看
topology-changes
。
我无法弄清楚256
和43
或topology-changes
在这里是什么意思。它们是粉红色的,但它们后面没有超链接。在常见问题解答页面上也找不到任何内容。尝试在 Cassandra 网站的搜索字段中使用这些关键字进行搜索,但没有得到任何有意义的结果。
有人可以帮我理解这一点吗?如果这不是解决此问题的正确位置,请不要对其投反对票,只需在评论中告诉我,我可以将其移至正确的论坛/部分。我从社区 -> 讨论页面到达这里
我试图理解将 PostgreSQL 函数标记为 LEAKPROOF 的含义。假设我们有一个(单租户)Web 应用程序设置,即浏览器 -> 服务器(Django、Rails 等) -> PostgreSQL。服务器是唯一可以访问 PostgreSQL 的服务器,也是唯一可以添加运行查询、执行函数等的服务器。
服务器尝试查询公共模式中名为 的表foo
。该表只是一个主键id
和一个jsonb
字段 ,bar
包含 100,000 行。该jsonb
字段上有一个 GIN 索引。当未应用行级安全性时,任何使用 GIN 索引->
的查询都可以。bar
但是,当应用行级安全性时,行级安全性会强制进行顺序扫描。这是一个已知的“问题”,如此处、此处等所述。
在阅读了 PostgreSQL 文档和大量帖子后,我很难看到jsonb
用 LEAKPROOF 等效项覆盖过滤器操作的风险。我知道文档说它可能“泄漏”信息,但在单个租户设置中,它会将信息泄漏给谁?服务器可以过滤掉发送给客户端的任何错误消息,并且服务器本身是受信任的实体。
我正在做一些数据导入,包括时区转换。我导入的数据位于 America/New_York 时区,我必须将其导入为 UTC 时间戳。
我尝试了一些在互联网上找到的例子,例如:
to_timestamp(tar.read_at_date || ' ' || tar.read_at_hour, 'MM/DD/YYYY HH24:MI')::timestamp without time zone at time zone 'America/New_York' at time zone 'utc'
这似乎对大多数数据都有效,但是,我注意到在特定时间有一些奇怪的转换,比如 Postgres 对 UTC 时区应用夏令时(???)。
要快速说明行为,请查看下面的示例和结果:
select ('2023-03-25 22:00:00'::timestamp at time zone 'America/New_York' at time zone 'utc');
result: 2023-03-26 03:00:00.000
select ('2023-03-25 23:00:00'::timestamp at time zone 'America/New_York' at time zone 'utc');
result: 2023-03-26 03:00:00.000
我正在运行这些查询:
PostgreSQL [15.5
PostgreSQL 15.5 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6), 64-bit]
另外,值得一提的是,2023 年纽约的夏令时从 3 月 12 日星期日凌晨 2:00 开始。有趣的是,2023 年 3 月 26 日凌晨 2 点是欧洲时钟前进的时间。
有什么合理的解释为什么会发生这种情况吗?
我这里有一个简单的 PostgreSQL 实例,由构建脚本生成。目标是在一段时间内(例如 5 分钟左右)没有新的连接请求时自动安全关闭。
最好的方法是什么?postgresql.conf
而类似的人在这样的问题上却出人意料地保持沉默。
我们有一台服务器运行默认的单个 MSSQL 作为命名实例(名为 MyDB)
我们必须重建服务器,具有相同的 dns 名称
他们在上面安装了 MSSQL 并将旧数据库恢复到其中
但是当他们安装 MSSQL 时,他们使用了默认实例名称
所以现在 Server1\MSSQLSERVER 不再是 Server1\MyDB,而且我们的很多旧东西都坏了
我想在 Server1 的 Sql Server 配置管理器中添加一个别名,它将名称 MyDB 指向 MSSQLSERVER 默认实例。我无法使其正常工作,可能是因为它使用相同的端口或者我没有正确配置它。
我应该在创建别名时使用哪些设置来让我的设置识别旧实例名称并将其重定向到新实例。
所以我有一个这样的警报表:
my_db=> \d alerts_alert
Table "public.alerts_alert"
Column | Type | Collation | Nullable | Default
----------------+--------------------------+-----------+----------+----------------------------------
received_at | timestamp with time zone | | not null |
id | bigint | | not null | generated by default as identity
data | jsonb | | not null |
updated_at | timestamp with time zone | | not null |
status | character varying(8) | | not null |
owner_id | uuid | | |
resolved_by_id | uuid | | |
Indexes:
"alerts_alert_pkey" PRIMARY KEY, btree (id)
"alerts_aler_data_eae7f5_gin" gin (data)
"alerts_alert_data_gin" gin (to_tsvector('english'::regconfig, COALESCE(data::text, ''::text)))
"alerts_alert_owner_id_0c00548a" btree (owner_id)
"alerts_alert_resolved_by_id_b59cbeaf" btree (resolved_by_id)
Foreign-key constraints:
"alerts_alert_owner_id_0c00548a_fk_accounts_user_id" FOREIGN KEY (owner_id) REFERENCES accounts_user(id) DEFERRABLE INITIALLY DEFERRED
"alerts_alert_resolved_by_id_b59cbeaf_fk_accounts_user_id" FOREIGN KEY (resolved_by_id) REFERENCES accounts_user(id) DEFERRABLE INITIALLY DEFERRED
我确实想对该列执行全文搜索data
。
我想出了这个查询,但它的性能很差:
my_db=> explain analyze WITH cte AS (
SELECT id, received_at, data, updated_at, owner_id, resolved_by_id, status,
to_tsvector('english'::regconfig, COALESCE(data::text, '')) AS search_vector
FROM alerts_alert
)
SELECT id, received_at, data, updated_at, owner_id, resolved_by_id, status, search_vector,
ts_rank(search_vector, websearch_to_tsquery('english'::regconfig, 'haykd')) AS rank
FROM cte
WHERE search_vector @@ websearch_to_tsquery('english'::regconfig, 'haykd')
ORDER BY rank DESC LIMIT 21;
这是它给我的:
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=1518.59..1529.61 rows=21 width=194) (actual time=3891.969..3952.546 rows=21 loops=1)
-> Result (cost=1518.59..2195.31 rows=1289 width=194) (actual time=3891.962..3952.522 rows=21 loops=1)
-> Sort (cost=1518.59..1521.81 rows=1289 width=162) (actual time=3868.134..3868.145 rows=21 loops=1)
Sort Key: (ts_rank(to_tsvector('english'::regconfig, COALESCE((alerts_alert.data)::text, ''::text)), '''haykd'''::tsquery)) DESC
Sort Method: top-N heapsort Memory: 28kB
-> Bitmap Heap Scan on alerts_alert (cost=538.11..1483.83 rows=1289 width=162) (actual time=19.143..3862.893 rows=1327 loops=1)
Recheck Cond: (to_tsvector('english'::regconfig, COALESCE((data)::text, ''::text)) @@ '''haykd'''::tsquery)
Heap Blocks: exact=202
-> Bitmap Index Scan on alerts_alert_data_gin (cost=0.00..537.79 rows=1289 width=0) (actual time=12.832..12.832 rows=1432 loops=1)
Index Cond: (to_tsvector('english'::regconfig, COALESCE((data)::text, ''::text)) @@ '''haykd'''::tsquery)
Planning Time: 35.525 ms
Execution Time: 3953.748 ms
该表不大,只有 12k 行。有什么建议可以让这个更快吗?我使用的是 PostgreSQL 16
更新:
explain (analyze, buffers)
正如设置后运行的评论中所建议的track_io_timing = on
:这是我得到的:
my_db=> explain (analyze, buffers) WITH cte AS (
SELECT id, received_at, data, updated_at, owner_id, resolved_by_id, status,
to_tsvector('english'::regconfig, COALESCE(data::text, '')) AS search_vector
FROM alerts_alert
)
SELECT id, received_at, data, updated_at, owner_id, resolved_by_id, status, search_vector,
ts_rank(search_vector, websearch_to_tsquery('english'::regconfig, 'haykd')) AS rank
FROM cte
WHERE search_vector @@ websearch_to_tsquery('english'::regconfig, 'haykd')
ORDER BY rank DESC LIMIT 21;
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=3064.58..3075.61 rows=21 width=194) (actual time=3029.762..3089.928 rows=21 loops=1)
Buffers: shared hit=5518
-> Result (cost=3064.58..3766.51 rows=1337 width=194) (actual time=3029.761..3089.919 rows=21 loops=1)
Buffers: shared hit=5518
-> Sort (cost=3064.58..3067.93 rows=1337 width=162) (actual time=3007.831..3007.840 rows=21 loops=1)
Sort Key: (ts_rank(to_tsvector('english'::regconfig, COALESCE((alerts_alert.data)::text, ''::text)), '''haykd'''::tsquery)) DESC
Sort Method: top-N heapsort Memory: 28kB
Buffers: shared hit=5417
-> Bitmap Heap Scan on alerts_alert (cost=2055.61..3028.54 rows=1337 width=162) (actual time=4.503..3005.258 rows=1337 loops=1)
Recheck Cond: (to_tsvector('english'::regconfig, COALESCE((data)::text, ''::text)) @@ '''haykd'''::tsquery)
Heap Blocks: exact=204
Buffers: shared hit=5414
-> Bitmap Index Scan on alerts_alert_data_gin (cost=0.00..2055.28 rows=1337 width=0) (actual time=2.097..2.097 rows=1465 loops=1)
Index Cond: (to_tsvector('english'::regconfig, COALESCE((data)::text, ''::text)) @@ '''haykd'''::tsquery)
Buffers: shared hit=482
Planning:
Buffers: shared hit=276 read=2
I/O Timings: shared/local read=1.171
Planning Time: 35.782 ms
Execution Time: 3090.356 ms
我正在 AWS RDS 上运行db.t4g.micro