16 May 2022
MertKocakaya
0 Yorum

Herkese selamlar. Uzun zamandır talep ettiğiniz içeriği hazırlamış bulunuyoruz! Pek çoğumuz kullandığımız WordPress tabanlı web sitelerimizde, birden çok eklenti kullanıyor, zaman zaman tema değişikliği yapıyor, yeni sayfa ve yazılar ekleyip, bir çok sayfa ve yazıyı da siliyoruz. Peki hiç merak ettiniz mi bu sayfa ve yazıların, eklenti ve temaların veritabanındaki kalıntıları nereye gidiyor? Kullandığımız tüm plugin ve yaptığımız işlemlerin revision kalıntıları, meta kalıntıları ne yazık ki WordPress veritabanımızda barınmaya devam ediyor. Örnek bir veritabanına giriş yaptığınızda özelikle “wp-postmeta” tablonuzda aşırı bir satır fazlalığı ve şişkinlik olduğunu görürsünüz. Bunun temel sebebi ise yazdığınız her sayfa ve içeriğin gerek önizleme ve taslak şablonlarının, gerekse metalarının bu tablolarda saklanıyor olmasıdır.

WordPress Veritabanını Ne Şişiriyor Bu kadar?

Bu soru üzerine epeydir kafa patlatıyorum diyebilirim. Çalıştığım firmalarda ve danışmanlık verdiğim pek çok kurumun veritabanındaki şişkinlikleri temizlemek için pek çok yol denedim. Bir gün oturdum ve tüm günümü sadece veritabanındaki tablo ve satırları incelemeye ayırdım. Gördüm ki WordPress veritabanını şişiren başlıca hatalardan birisi, yazı ve sayfaların çeşitli eklentilerle clone yani kopyalanarak hazırlanması.

WordPress üzerinde bir sayfa ve yazı açtığınız zaman wp-postmeta içerisinde o sayfa/yazıyla alakalı 10-15 aralığında satır eklenmekte. Bu satırların içerisinde yazının başlığı, görsel bilgileri, metaları, url, etiket vb. bilgileri yer almakta. Bunun haricinde aynı içerik için taslak, önizleme gibi revision bilgileri de kaydedilmekte. Siz bir içeriği kopyala dediğiniz zaman veritabanında bu içeriğe ait tüm bilgi ve satırları kopyalayarak ekstra yeni satırları da eklemekte. Bu yüzden WordPress veritabanınızda her içerik kopyalamasında artarak çoğalan satır ve revision çöplüğü oluşmakta.

Bunun yanı sıra herhangi bir içeriği sildiğini zaman ya da bir eklentiyi kaldırdığınız zaman o içerik ve eklentiye dair tüm meta bilgileri veritabanında saklanmaya devam eder. Bunlar da gereksiz bir veritabanı yükü oluşturur. İşte bu başlığımızda tüm bu yükleri, silinmiş yahut kırık veritabanı tablolarını onarmaya dair oldukça pratik SQL sorguları paylaşacağız. Burada yer alan SQL sorgularını veritabanı “Sorgu” kısmından çalıştırarak veritabanınızı büyük oranda temizleyebilirsiniz. Haydi başlayalım!

Postlardan Kalan Revision Artıklarını Temizleme

WordPress web sitenizde sildiğiniz herhangi bir içeriğin revision artıkları veritabanında kalmaktadır. Bu artıkları temizlemek için aşağıdaki sorguyu çalıştırabilirsiniz:

                                
                                    DELETE FROM wp_posts WHERE post_type='revision';
                                
                            

Taslaklarda Kalan Yazı ve Sayfaları Temizleme

Bu sorguyu çalıştırdığınız zaman taslak statüsünde yer alan tüm içerikleriniz temizlenir. Eğer önemli taslaklarınız varsa bu sorguyu çalıştırmadan önce önemlileri yayına alıp sorguyu çalıştırdıktan sonra tekrar taslağa alabilirsiniz.

                                
                                    DELETE FROM wp_posts WHERE post_status = 'draft';
                                
                            

Çöpte Yer Alan Yazı ve Sayfaları Temizleme

WordPress yazı ve sayfa çöplüğünde kimi zaman binlerce içerik kalmakta ve temizlemekte büyük güçlük çıkarmaktadır. Bu içerikleri toplu bir şekilde temizlemek için aşağıdaki sorguyu kullanabilirsiniz:

                                
                                    DELETE FROM wp_posts WHERE post_status = 'trash';
                                
                            

Kırık/Bozuk Tabloları Onarma

Kimi zaman bir eklentiyi ya da temayı silip yeniden kurduğunuz zaman, o eklenti ve temanın daha önceki kalıntıları, tablolarınızda bozulma ve kırılmalara sebep olmaktadır. Bu bozulmaları temizlemek için aşağıdaki sorguyu kullanabilirsiniz:

                                
                                    DELETE FROM wp_term_relationships
WHERE NOT EXISTS
( SELECT * FROM wp_posts
	WHERE wp_term_relationships.object_id
	= wp_posts.ID);
                                
                            

Spam Yorumları Temizleme

Her ne kadar spam yorumları engellemek için çeşitli eklentiler kullansak da bazen spam yorum kategorisinde onbinlerce yorum kalıntısı durabiliyor. Bu yorumları toplu bir şekilde temizlemek için aşağıdaki sorguyu çalıştırabilirsiniz:

                                
                                    DELETE FROM wp_commentmeta
WHERE comment_id NOT IN
( SELECT comment_id FROM wp_comments );
                                
                            

Postmeta’da Kalan Çöpleri Temizleme

Yukarıda bahsettiğimiz wp-postmetada kalmış pek çok çöp ve kalıntı dosyasını aşağıdaki sorguyla rahatlıkla temizleyebilirsiniz:

                                
                                    DELETE wp_postmeta FROM wp_postmeta
LEFT JOIN wp_posts ON
(wp_postmeta.post_id = wp_posts.ID)
WHERE (wp_posts.ID IS NULL);
                                
                            

Ardından bu sorguyu çalıştırın:

                                
                                    DELETE FROM wp_postmeta
WHERE meta_key IN ('_edit_lock','_edit_last');
                                
                            

Transient Kalıntılarını Temizleme

Çeşitli ayar ve transient kalıntılarını temizlemek için bu sorguyu çalıştırabilirsiniz:

                                
                                    DELETE FROM wp_options
WHERE option_name LIKE ('_transient_%');
                                
                            

Ardından bu sorguyu çalıştırın:

                                
                                    DELETE FROM wp_options
WHERE option_name LIKE ('_transient%_feed_%');
                                
                            

Silinmiş Yazı ve Sayfaların Kalıntılarını Temizleme

WordPress web sitenizde silmiş olduğunuz pek çok sayfa ve yazının ne yazık ki postmeta içerisinde kalıntıları durmaktadır. İşte aşağıdaki sorgu ile, wp-posts ile wp-postmeta arasında eşleşmeyen ne kadar kalıntı içerik çöpü varsa tamamını temizleyebilirsiniz.

                                
                                    DELETE wp_posts FROM wp_posts LEFT JOIN
wp_posts child ON (wp_posts.post_parent = child.ID)
WHERE (wp_posts.post_parent <> 0)
AND (child.ID IS NULL);
                                
                            

Ardından bu sorguyu çalıştırın:

                                
                                    DELETE pm FROM wp_postmeta
pm LEFT JOIN wp_posts wp
ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
                                
                            

Temizlik Sonrası Tüm Tabloları Optimize Etme

Harika! Başarıyla veritabanınızdaki gereksiz tüm kalıntıları temizlediniz. Ancak işimiz bitti mi? Elbette hayır! Son 1 işimiz daha kaldı, o da tüm tabloları optimize etmek. Böylece yaptığımız işlemlerde ortaya çıkan ne kadar kalıntı varsa ebediyen veritabanımızdan silinmiş olacaklar. Veritabanındaki tablolarımızı optimize etmek için aşağıdaki sorguyu kullanabilirsiniz:

                                
                                    OPTIMIZE TABLE
`wp_commentmeta`,
`wp_comments`,
`wp_options`,
`wp_postmeta`,
`wp_posts`,
`wp_term_relationships`;
                                
                            

Hepsi bu kadar! Artık daha temiz, daha güvenli ve daha hızlı bir veritabanına sahipsiniz!