From: | Fırat Güleç <firat(dot)gulec(at)hepsiexpress(dot)com> |
---|---|
To: | M(dot)Atıf CEYLAN <mehmet(at)atifceylan(dot)com> |
Cc: | pgsql-tr-genel <pgsql-tr-genel(at)postgresql(dot)org>, Devrim Gündüz <devrim(at)gunduz(dot)org>, Erkan Durmuş <derkan(at)gmail(dot)com>, "N(dot) Can KIRIK" <can(at)epati(dot)com(dot)tr> |
Subject: | Re: Bulk Update |
Date: | 2017-10-02 13:02:07 |
Message-ID: | 1dddec3ea26ab5c74d7484ae022f0407@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
Merhaba Atif Bey,
Çalışan function aşağıdaki(ilk mailde göndermiştim) “select
receiver_address_fill(316876);” şekilde çağrılıyor.100 100 bu işlem
yapılmıyor. Tekrar ölçüm yaptım 4.02 dak sürdü. Birden fazla update var ve
select çalışıyor, bundan dolayı bu kadar sürdüğünü düşünüyorum. Donanım ile
ilgili bir sıkıntının olduğunu düşünmüyorum.
create or replace function receiver_address_fill(p_record_cnt integer)
returns void
LANGUAGE plpgsql
AS $$
DECLARE
c_delivery RECORD;
cur_rad CURSOR (x_address_id BIGINT, x_receiver_id BIGINT) FOR SELECT *
FROM
receiver_address
WHERE
receiver_id = x_receiver_id AND
address_id = x_address_id;
c_rad RECORD;
BEGIN
FOR c_delivery IN SELECT * FROM delivery WHERE recipient_address_id is
NULL LIMIT p_record_cnt LOOP
OPEN cur_rad(c_delivery.receiver_address_id,c_delivery.receiver_id);
FETCH cur_rad INTO c_rad;
IF c_rad.id IS NOT NULL
THEN
UPDATE delivery SET recipient_address_id = c_rad.id WHERE id =
c_delivery.id;
UPDATE delivery_transaction SET recipient_address_id = c_rad.id WHERE
delivery_id = c_delivery.id;
END IF;
CLOSE cur_rad;
END LOOP;
END;
$$;
*From:* M.Atıf CEYLAN [mailto:mehmet(at)atifceylan(dot)com]
*Sent:* Monday, October 2, 2017 3:44 PM
*To:* Fırat Güleç <firat(dot)gulec(at)hepsiexpress(dot)com>
*Cc:* pgsql-tr-genel <pgsql-tr-genel(at)postgresql(dot)org>; Devrim Gündüz <
devrim(at)gunduz(dot)org>; Erkan Durmuş <derkan(at)gmail(dot)com>; N. Can KIRIK <
can(at)epati(dot)com(dot)tr>
*Subject:* RE: [pgsql-tr-genel] Bulk Update
4.5 milyon update icin 5dk çok uzun süre. Muhtemelen bunun nedeni loop ile
ve 100 satir 100 satir bu islemi yamaniz.
Update from seçeneğini transaction baslatip yapmanız cok daha saglikli
olur. Neticede commit yapmadiginiz surece size kontrol sansi veriyor.
Ben olayin saniyelere inecegini düşünüyorum.
2 Eki 2017 15:23 tarihinde "Fırat Güleç" <firat(dot)gulec(at)hepsiexpress(dot)com>
yazdı:
Merhaba,
Cevap veremez duruma düşüyor derken o tabloları kullanan sorgular için bunu
söylemedim. Bütün db gelen sorgularda problem yaşamıştık, loginler vs bile
gelmez olmuştu. Bu yüzden lock'dan dolayı olduğunu düşünmüyorum.
Test ortamında bu update'i denedim. Yaklaşık 5 dak da 4.5 milyon kaydı
update ettim, bir problem yaşamadım, fakat cpu tavan yaptı. Canlıda böyle
bir update yapacak isem gece saatlerinde yapmayı öngörüyorum. Server'ın
donanımını ve tuning konularını biraz daha inceleyeceğm.
Yardımlarınız için hepinize teşekkür ederim.
-----Original Message-----
From: Devrim Gündüz [mailto:devrim(at)gunduz(dot)org]
Sent: Sunday, October 1, 2017 10:38 PM
To: N. Can KIRIK <can(at)epati(dot)com(dot)tr>
Cc: Fırat Güleç <firat(dot)gulec(at)hepsiexpress(dot)com>; Erkan Durmuş
<derkan(at)gmail(dot)com>; M.Atıf CEYLAN <mehmet(at)atifceylan(dot)com>; pgsql-tr-genel
<pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: [pgsql-tr-genel] Bulk Update
Merhabalar,
On Sun, 2017-10-01 at 19:11 +0300, N. Can KIRIK wrote:
> sanıyorum 5 milyon kaydı etkileyen update sürerken, diğer
> bağlantılardan da gelen update işlemleri nedeniyle exclusive lock söz
> konusu oluyor ve bu yüzden cevap veremez duruma düşüyor.
Öyleyse de yazılım sorunu, aynı anda 5 milyon kayıdı birden fazla neden
update etsinler ki? Fırat Bey açıklar herhalde.
Zaten ya dediğin gibi hocam, ya da donanım/tuning sorunu var.
Saygılar,
--
Devrim Gündüz
EnterpriseDB: https://www.enterprisedb.com PostgreSQL Consultant, Red Hat
Certified Engineer
Twitter: @DevrimGunduz , @DevrimGunduzTR
From | Date | Subject | |
---|---|---|---|
Next Message | Ali Mumcu | 2017-12-04 08:56:41 | Read, Write IO Performans |
Previous Message | M.Atıf CEYLAN | 2017-10-02 12:44:16 | Re: Bulk Update |