我在数据库中有一个表 t (PostgreSQL 10.4):
\d t;
Table "public.t"
Column | Type | Collation | Nullable | Default
----------+------------------------+-----------+----------+---------
sn | character varying(11) | | |
site | character varying(50) | | |
Indexes:
"site_2018_idx" btree (site), tablespace "indexspace"
"sn_2018_idx" btree (sn), tablespace "indexspace"
Run Code Online (Sandbox Code Playgroud)
我需要为特定站点找到不同的 'sn,我这样做:
SELECT DISTINCT sn FROM t WHERE site='a_b301_1' ORDER BY sn ;
Run Code Online (Sandbox Code Playgroud)
它可以工作,但速度很慢,返回 75 个不同的“sn”值大约需要 8 分钟!有没有办法加快速度?解释分析给出了这个输出:
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sort (cost=42873094.21..42873103.25 rows=3615 width=12) (actual time=190431.413..190431.417 rows=75 loops=1)
Output: sn
Sort Key: t.sn
Sort Method: quicksort …Run Code Online (Sandbox Code Playgroud) postgresql performance distinct postgresql-10 query-performance
我有一个较早执行缓慢的查询。后来我发现它没有并行运行,这使得查询执行速度变慢。
查询涉及一个 big view,然后使用大量temp tablesand查询视图sub query。
我UDF从视图中删除了一个并使用inline functions并使用了一个标量TVF,然后它开始在parallel execution.
这几天一切顺利,有一天我注意到查询运行缓慢。于是查了一下执行计划,发现查询是在串行模式下执行的。我检查了查询的计划缓存,我看到了很多涉及该视图的缓存计划。我删除了不并行的计划,然后查询运行得很快。
现在我每天早上都这样做以强制查询并行运行。
额外细节:
如何强制查询永远并行运行?
performance sql-server optimization parallelism plan-cache query-performance
使用PostgreSQL v10.1.2 中的存储过程,哪种方法最快或哪种更好:检查行是否存在然后更新或尝试直接更新,但可能找不到与条件匹配的行?我需要检查很多条件相同的表,表是不是“非规范化”,我进行了几次测试,有时选项 1在其他情况下更快,选项 2 ...
选项1:
IF EXISTS ( SELECT 1
FROM public.table1
WHERE column1 = 'oldvalue' )
THEN
UPDATE public.table1
SET column1 = 'newvalue' , date_update= ....
WHERE column1 = 'oldvalue';
END IF ;
Run Code Online (Sandbox Code Playgroud)
选项 2:
UPDATE public.table1
SET column1 = 'newvalue' , date_update= ...
WHERE column1 = 'oldvalue';
Run Code Online (Sandbox Code Playgroud)
选项 3:
perform FROM public.table1 WHERE column1 = 'oldvalue' ;
if found then
UPDATE public.table1 SET column1='newvalue', date_update = ... WHERE column1 …Run Code Online (Sandbox Code Playgroud) postgresql performance stored-procedures update postgresql-10
非聚集索引使用聚集索引的键定位行与该表没有聚集索引且非聚集索引通过 RID 定位行之间是否存在性能差异?
不同级别的碎片是否也会影响这种性能比较?(例如,在这两种情况下,表的碎片率为 0%、50%、100%。)
performance sql-server clustered-index nonclustered-index bookmark-lookup performance-tuning
一个表可以同时具有聚集列存储索引和非聚集列存储索引吗?
我看到了仅将聚集列存储索引与非聚集二进制行索引一起使用的示例策略。
当我尝试创建集群列存储和非集群列存储时,我收到错误:
Msg 35339, Level 16, State 1, Line 7
Multiple columnstore indexes are not supported.
Run Code Online (Sandbox Code Playgroud) performance index sql-server columnstore sql-server-2016 performance-tuning
我需要按月(和年)分组,我在想:
GROUP BY CAST(YEAR(tDate) AS NVARCHAR(4)) + '-' + CAST(MONTH(tDate) AS NVARCHAR(2))
Run Code Online (Sandbox Code Playgroud)
但是我在网上找到了类似的东西:
GROUP BY YEAR(tDate), Month(tDate)
Run Code Online (Sandbox Code Playgroud)
两者是等价的吗?用第二种比较好?
NEWSEQUENTIALID 在数据库中是唯一的吗?我们用 NEWSEQUENTIALID 在数据库中规划了许多表,同时插入并希望确保每个 guid 都是唯一的,无论它们是否在不同的表中。
常规 NEWID() 将保证数据库中的唯一性,并且有重复的机会是被小行星/闪电击中的机会,但是它们并不能缓解碎片问题。
这篇文章讨论了 Mac 地址,但是我想为上面特定的数据库指定问题。 /sf/ask/1988347511/
performance database-design sql-server sql-server-2016 performance-tuning
我有几个表,我试图将它们与以下查询结合起来。我正在使用以下表格:
LoanOrigination:这包含贷款特征,例如资产价值、贷款期限等。每笔贷款有一个独特的观察。该表在LOAN_ID、SUB_SAMPLE和上建立索引COLLATERAL_TYPE。LoanPerformance:这包含了所有贷款的表现LoanOrigination。每一行是一个独特的MONTHLY_REPORTING_PERIOD和LOAN_ID组合,并且该表已被索引两个。CollateralData:这包含基于COLLATERAL_TYPE. 这样做的目的是估计贷款对抵押品的当前价值。下面查询的目的是组合这些表,以便每一行都包含贷款特征以及当月和下个月的拖欠状态。但是,查询速度非常慢。有什么办法可以加快速度吗?
with
COLLATERAL_VALUES as (
select
COLLATERAL_TYPE,
dateadd( day, 1-day(AsOfDate), AsOfDate) as ASOFDATE,
Value as INDEX
from LoanData.CollateralData
),
SAMPLE_LOANS as (
select
a.*,
b.INDEX as INDEX_T0
from LoanData.LoanOrigination a
join COLLATERAL_VALUES b on b.ASOFDATE = a.ORIG_DATE and b.COLLATERAL_TYPE = a.COLLATERAL_TYPE
where SUB_SAMPLE = 0
),
LOAN_STATE as (
select
a.LOAN_ID,
MONTHLY_REPORTING_PERIOD AS CUR_DATE,
CURRENT_ACTUAL_UPB as CUR_UPB,
LOAN_AGE, …Run Code Online (Sandbox Code Playgroud) 更新:这个问题的范围不包括基本的性能调整,并认为这些已经完成。因此,如果您乐于分享一些明显的变量,例如innodb_io_capacity,innodb_flush_log_at_trx_commit甚至设置innodb_flush_method为O_DIRECT您最近发现的美妙旋钮,情况并非如此。
最近,我将一台生产服务器从 MySQL 5.7 移到了 8.0。紧接着我注意到 update 语句有时(并不总是)花费更多时间(大量)并且在这些期间倾向于堆叠。
Mysql 配置相同,硬件相似(相同的 CPU,相同数量的 RAM 及其类型,相同的磁盘型号(仅增加了大小)),因此唯一改变的两件事是 FreeBSD 版本(11.x -> 12.x) 和 MySQL 版本 (5.7.x -> 8.0)。我真的怀疑这与 FreeBSD 12 有什么关系,所以我认为这是 MySQL 8.0 的细节。
看看服务器性能,我可以说有足够的 CPU 可用(至少 30% 或更多),磁盘 i/o 饱和度最高为 50%。所以问题是 - 8.0 中有什么东西会在某些时候停止更新?
这是更新声明及其简介:
UPDATE mp_user SET ts_update = NOW(), latitude = '42.962993621826',
longitude = '47.550437927246', accuracy = '515.91363525391',
source = 'lbs', batteryLevel = '81', steps = '0', turnovers = '0',
setCoordsTime …Run Code Online (Sandbox Code Playgroud) 我正在将数据从一个数据库归档到另一台 SQL 服务器上的另一个数据库。我们正在我们的数据库中归档多个表。最近我们对源数据库的插入增加了,但归档运行速度不够快。我正在考虑将表的归档拆分为单独的作业,但是我可以做些什么来提高查询的性能。
实际计划中的 QueryTimeStats 如下
+-----------+---------+-------------+---------+
| Statement | CpuTime | ElapsedTime | Percent |
+-----------+---------+-------------+---------+
| 1 | 3 | 3 | 0.00% |
| 2 | 3 | 4 | 0.00% |
| 3 | 0 | 0 | 0.00% |
| 4 | 1 | 1 | 0.00% |
| 5 | 0 | 1 | 0.00% |
| 6 | 1 | 1 | 0.00% |
| 7 | 6 | 6 | …Run Code Online (Sandbox Code Playgroud) performance ×10
sql-server ×7
optimization ×2
postgresql ×2
columnstore ×1
distinct ×1
index ×1
mysql-8.0 ×1
parallelism ×1
plan-cache ×1
update ×1