我用来pg_stat_statements
查找生产 PostgreSQL 13 中的慢查询。有两件事:
我不确定此扩展对性能的影响。
我可以做些什么来提高其性能吗?下面的查询需要 > 1 秒 - 有什么建议吗?
-- add the plugin
create extension pg_stat_statements;
select pg_stat_reset();
select pg_stat_statements_reset();
Run Code Online (Sandbox Code Playgroud)
进而:
-- find slow queries using the extension:
select * from pg_stat_statements order by total_exec_time desc limit 50;
Run Code Online (Sandbox Code Playgroud) 我尝试连接 redis 6.0+,这是我现在配置的 Python celery redis 代理 url:
broker_url = redis://:default:123456@cruise-redis-headless.reddwarf-cache.svc.cluster.local:6379/5
celery_result_backend = redis://:default:123456@cruise-redis-headless.reddwarf-cache.svc.cluster.local:6379/5
Run Code Online (Sandbox Code Playgroud)
但是当我使用以下命令启动芹菜时:
root@pydolphin-service-6fc4b98f54-msfql:~/pydolphin# celery -A dolphin.tasks.tasks worker --loglevel=INFO -n worker2 -Q non_editor_pick_and_diff_pull --concurrency 2
/usr/local/lib/python3.9/site-packages/celery/platforms.py:834: SecurityWarning: You're running the worker with superuser privileges: this is
absolutely not recommended!
Please specify a different user using the --uid option.
User information: uid=0 euid=0 gid=0 egid=0
warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
-------------- celery@worker2 v5.1.2 (sun-harmonics)
--- ***** -----
-- ******* ---- Linux-3.10.0-1160.31.1.el7.x86_64-x86_64-with-glibc2.28 2021-08-08 20:45:35
- *** --- * ---
- ** ---------- [config]
- …
Run Code Online (Sandbox Code Playgroud) 由于aVACUUM FULL
锁表,这对于我们的生产环境来说是不可接受的。
是否可以只在生产系统上运行VACUUM
而不运行?VACUUM FULL
是否可以VACUUM
让空间重新用于新的INSERT
用途?
我在 MySQL 5.7 表中创建了一个created_time
字段BIGINT
,现在我想在插入记录时自动生成一个 Unix 毫秒时间戳。是否有可能做到这一点?我尝试了下面的代码,但失败了:
ALTER TABLE db.video_info MODIFY COLUMN created_time bigint(20)
DEFAULT (ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)) NULL;
Run Code Online (Sandbox Code Playgroud) 我在 PostgreSQL 13 中有这个表:
CREATE TABLE public."domain" (
id int8 NOT NULL GENERATED ALWAYS AS IDENTITY,
domain_name varchar NOT NULL,
-- more columns
expire_date timestamp NULL,
days_before_trigger int4 NOT NULL DEFAULT 14
);
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个生成的列notify_trigger_date
,派生自expire_date
减days_before_trigger
,以记录我的网站 url ssl 证书到期日期。如何自动生成该列?
它看起来像这样:
notify_trigger_date = expire_date - 7 day
Run Code Online (Sandbox Code Playgroud)
我正在尝试像这样实现它:
ALTER TABLE "domain" ADD COLUMN notify_trigger_date timestamp
GENERATED ALWAYS AS ((expire_date::timestamp - '1 day')) STORED;
Run Code Online (Sandbox Code Playgroud)
我不知道如何1 day
用天数替换days_before_trigger
?此命令运行时出错:
Run Code Online (Sandbox Code Playgroud)SQL Error [22007]: ERROR: invalid input syntax for …
我的表article_favorites
没有行号,现在它包含 100000 条记录。我想在表中添加一个 bigint id 列,并将 id 默认设置为行号。我尝试了这个sql:
update article_favorites set id = row_number() OVER ()
Run Code Online (Sandbox Code Playgroud)
但它告诉我window functions are not allowed in UPDATE
,我应该怎么做才能将 id 更新为行号?
现在我serial
在PostgreSQL 13中生成表主键,但是今天我发现ID跳跃并且ID空间有很大的间隙。会浪费很多ID。我阅读了文档,发现 PostgreSQL 有identity
作为 SQL 标准生成的主键。我找到了在新版本的PostgreSQL中使用的建议identity
,但我不知道ID是否连续。
在 PostgreSQL 13 中我应该怎么做才能获得没有间隙的主键 id?
解决方案1:我尝试更改serial
为identity
这样:
BEGIN;
ALTER TABLE public.article ALTER id DROP DEFAULT; -- drop default
DROP SEQUENCE public.article_id_seq; -- drop owned sequence
ALTER TABLE public.article
-- ALTER clientid SET DATA TYPE int, -- not needed: already int
ALTER id ADD GENERATED ALWAYS AS IDENTITY (RESTART 2270886);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
还是有差距。
解决方案 2:我尝试添加关于我的应用程序插入文章的 Redis 分发锁,如下所示:
def save_single(guid, pub_time, title, author, content, source, link):
if content …
Run Code Online (Sandbox Code Playgroud) 现在我有一个表存储一些 rss 订阅 url,有时 url 以 '/' 结尾,现在我用 '/' 替换所有没有结尾的 url。确保子网址没有以“/”结尾。我想在 rss 子源表中添加自定义约束。如果子 url 以“/”结尾,则向应用程序抛出错误。我已经阅读了 PostgreSQL 13文档,发现它有很多约束,比如带有 int 数据类型的 uniq 约束检查约束。但是如何添加具有字符串数据类型的约束并确保字符串不以“/”结尾?有没有办法做这个动作?