[Performans] Tablolarınızı InnoDB'ye Çevirin

Started by Antes, April 04, 2010, 11:54:15 AM

Previous topic - Next topic

Antes

MySQL iki büyük veritabanı saklama motorunu/sistemini (artık siz hangisini daha çok severseniz) destekler: MyISAM ve   InnoDB.  MyISAM daha geçmişte yayımlanmıştır, varsayılandır ve SMF yüklemesi içinde varsayılandır.  Ve bu iyi bir sebepten dolayıdır:   MyISAM, InnoDBye göre tabloları daha hızlı okur.

Ancak, InnoDBnin MyISAM karşısında bazı önemli avantajları vardır.  İlki, bu önemlidir çünkü sorgunun nasıl çalıştığını dair temel anlamlara sahiptir. Diyelim ki ben sorguyu şu şekilde çalıştırdım:

SELECT   ID_MSG
FROM smf_messages
WHERE subject = 'Tabloları InnoDBye Çevir'
LIMIT 1;

MySQL belirli bir konuya bakarken (ki bu biraz zaman alır, konu sütunu bir içeriğe sahip değilse) kimseler o tabloya yazamaz. Bu da şu demektir, kimse tabloya ileti atamaz. Mesaj tablosu için, bu o kadar da büyük bir sorun değildir - ve TamMetin ( FULLTEXT ) içerik olması için zaten MyISAM olmalıdır.

Ancak, bu durumun topics, log_topics, ve friends tabloları için daha fazla önemsenmesi gereklidir. Örneğin, her konu görüntülediğinizde şu gerçekleşmektedir:

UPDATE smf_topics
SET numViews   = numViews + 1
WHERE ID_TOPIC = ###
LIMIT 1;

Eğer bir tablo kilitlenmişse, beklemesi gerekir... artık her ne oluyor veya bitmesi gerekiyorsa. Aynı şey bir çok kişinin aynı konuyu ( aynı anda ) görüntülediğinde de gerçekleşir. Bu konu tablolarının doğrultusunda hazır olana kadar beklemek zorundadır.

Bu InnoDB için doğru değildir.  Eğer iki kişi aynı konuyu görüntülüyorsa, evet... numViews güncellemesini beklemeleri gerekmektedir. Fakat iki farklı konuyu görüntülüyorlarsa, anında.  Bu büyük bir farktır, ve beklentilerinizin üstünde bir farklılık yaratabilir, bu biraz da sunucunuza bağlıdır.  Fakat, unutmayın... Bir ceza da olabilir.  MyISAM kötü bir şekilde kilitlenebilir, fakat yinede daha hızlı okur. Çok fazla değişmeyen tablolar içinse, kategoriler gibi, genellikle InnoDB kullanmak için bir sebep yoktur.

Örneğin, status.php'ye bakıp şöyle bi şey görebilirsiniz:

95 (87 uyuyor, 2 çalışıyor, 6 kilitli)

Bu şu demek çalışan sorgular diğer sorguları kilitliyor ve beklemelerine neden oluyor. Bu şuna işaret eder bazı tablolarda InnoDB kullanmanız gerekiyor ama kullanmıyorsunuz, fakat her zaman bu anlama gelmez. SMF ile, forumunuzdaki aktivite bir noktaya ulaştığında, şu sorguyu çalıştırarak tablolarınızı InnoDB'ye çevirebilirsiniz:

Bu kod SMF2 RC3 için tarafımca düzeltilmiştir ( log_search bölümü )
ALTER TABLE smf_attachments
TYPE=InnoDB;
ALTER TABLE smf_collapsed_categories
TYPE=InnoDB;
ALTER TABLE smf_log_actions
TYPE=InnoDB;
ALTER TABLE smf_log_boards
TYPE=InnoDB;
ALTER TABLE smf_log_errors
TYPE=InnoDB;
ALTER TABLE smf_log_karma
TYPE=InnoDB;
ALTER TABLE smf_log_mark_read
TYPE=InnoDB;
ALTER TABLE smf_log_online
TYPE=InnoDB;
ALTER TABLE smf_log_search_messages
TYPE=InnoDB;
ALTER TABLE smf_log_search_results
TYPE=InnoDB;
ALTER TABLE smf_log_search_subjects
TYPE=InnoDB;
ALTER TABLE smf_log_search_topics
TYPE=InnoDB;
ALTER TABLE smf_log_topics
TYPE=InnoDB;
ALTER TABLE smf_members
TYPE=InnoDB;
ALTER TABLE smf_pm_recipients
TYPE=InnoDB;
ALTER TABLE smf_sessions
TYPE=InnoDB;
ALTER TABLE smf_settings
TYPE=InnoDB;
ALTER TABLE smf_topics
TYPE=InnoDB;


Orjinal Hali Budur...
ALTER TABLE smf_attachments
TYPE=InnoDB;
ALTER TABLE   smf_collapsed_categories
TYPE=InnoDB;
ALTER TABLE smf_log_actions
TYPE=InnoDB;
ALTER   TABLE smf_log_boards
TYPE=InnoDB;
ALTER TABLE smf_log_errors
TYPE=InnoDB;
ALTER   TABLE smf_log_karma
TYPE=InnoDB;
ALTER TABLE smf_log_mark_read
TYPE=InnoDB;
ALTER   TABLE smf_log_online
TYPE=InnoDB;
ALTER TABLE smf_log_search
TYPE=InnoDB;
ALTER   TABLE smf_log_topics
TYPE=InnoDB;
ALTER TABLE smf_members
TYPE=InnoDB;
ALTER   TABLE smf_pm_recipients
TYPE=InnoDB;
ALTER TABLE smf_sessions
TYPE=InnoDB;
ALTER   TABLE smf_settings
TYPE=InnoDB;
ALTER TABLE smf_topics
TYPE=InnoDB;


Extradan, log_floodcontrol 'ün MEMORY/HEAP olmasını isteyebilirsiniz

DROP TABLE smf_log_floodcontrol;
CREATE TABLE smf_log_floodcontrol (
    ip char(16) NOT NULL,
  logTime int(10) unsigned NOT NULL default   '0',
  PRIMARY KEY (ip),
  KEY logTime (logTime)
) TYPE=HEAP;


Her şeyden önce, forumunuzu bakım moduna alıp bu işlem(i)(leri) öyle gerçekleştirin. Eğer phpmyadmin konusunda bilginiz yoksa buraya(ingilizce) tıklamanız yeterli olacaktır. Eğer bir problem ile karşılaşırsanız buraya(ingilizce) tıklayarak repair_settings.php denilen garip php dosyasını indirebilirsiniz :)

Alpay

Bende bayadır InnoDB ye geçmek istiyorum ancak halen araştırıyorum :P 1 senedir kadar sanırsam bu üşengeçliğide geçti =))) Teşekkür ederiz arkadaşım.

grafitus

Harika bir çeviri! Birçok kişinin işine yarıyacak bir şey bu. Yalnız status.php'de ne ola ki?



Antes

Bunların hepsi daha başlangıç ne kadar döküman varsa elden geçirip ( performans hakkında ) çevirip sunucam , ayrıca bu kadar kısa sürede onayladığınız için tekrar teşekkür ederim :)

Yanlız status.php 'yi bu performans işlemini uygulamadan önce çalıştırıp bazı detayları not edin , uyguladıktan sonra tekrar çalıştırın , böylece ne kadar hız farkı olduğunu bizede söylemiş olursunuz

rölyef

Çeviri için teşekkürler. Fakat, bu çeviri ileri seviyede kullanıcılara hitap ediyor. Başlancıç seviyesinde ve orta seviyede kullanıcılar buradan bir şey anlamıyor. Daha açıklayıcı bir çeviri ütfen.

Antes

Quote from: Fovist on April 11, 2010, 12:07:55 PM
Çeviri için teşekkürler. Fakat, bu çeviri ileri seviyede kullanıcılara hitap ediyor. Başlancıç seviyesinde ve orta seviyede kullanıcılar buradan bir şey anlamıyor. Daha açıklayıcı bir çeviri ütfen.

üzgünüm ama bu en basit anlatım ve orjinal metne sağdık kalınarak çeviri yapıldı.

gevv

Teşekkürler

merak ettim  simplemachines.org hanisini kullanıyor acaba  :)    birde   çevirmeyi deneyen oldumu
ElkArte is a modern, powerful community building forum software. https://www.elkarte.net/

Antes

Quote from: gevv on April 15, 2010, 05:15:12 PM
Teşekkürler
merak ettim  simplemachines.org hanisini kullanıyor acaba  :)    birde   çevirmeyi deneyen oldumu

SMF kullanıyo mu bilmem ama ben kullanıyorum, sonuç olarak bu konuyu yazan adam SMF'nin kurucusu :)

Haghi

Teşekkür ederiz arkadaşım.Önemli bir bilgi. :D


Advertisement: