Мы работаем над преобразованием БД из SQL Server в Aurora PostgreSQL.
Для некоторых функций в базе данных мы наблюдаем очень высокое время выполнения в PG (30+ секунд) по сравнению с SQL Server (0,5-2 секунды).
Мы уже установили для параметров базы данных значения, необходимые для оптимальной производительности.
Многие из этих функций ссылаются на таблицы из другой базы данных с использованием представлений внешних таблиц.
Ожидание клиента - производительность функций должна быть, по крайней мере, если не лучше, чем у нас в настоящее время на сервере SQL.
Как улучшить производительность в PG?
Ниже приведены соответствующие данные конфигурации:
SQL server config: Microsoft SQL Server 2012 (SP4) (KB4018073) – 11.0.7001.0 (X64). RAM: 16GB. Inter Xeon
Aurora RDS config: 4 vCPU, 30.5 GB RAM.
Пример кода:
Пример кода: // этот занимает менее одной секунды.
insert into temptable(
column1 ,column2,column3 ,
column4 ,column5, column6 ,
column7
)
SELECT --DISTINCT
t.col AS column1, d.column1,null as column3 ,
null as column4 ,null as column5,null as column6 ,
null as column7
FROM
view1 AS d
INNER JOIN table2 AS t
ON t.column2= d.column1
LEFT OUTER JOIN table2 AS i
ON i.col1 = t.col AND i.col = t.col2 AND i.col = var1 AND i.svc_type = var2
AND i.col2= var3 AND i.col1 = var4
WHERE
(i.col3 = 'XXX' OR d.col3 = 'XX')
AND i.col4 IN (var5, var6)
;
// This update query only taking 27 seconds and result 39 rows
update temptable set
column3=function1(column2, v1, v2, v3), -- this is single execution it took 412ms
column4=function2(column2, v3),-- this is single execution it took 350ms
column5=function3(column2, v3),
column6=function4(column2),
column7=function5(column2);
// this one taking less then one seconds.
OPEN rs1 FOR
select column1 ,column2,column3 ,
column4 ,column5, column6 ,
column7 from temptable;
RETURN NEXT rs1;