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