EC2 Büyük Eşgörünümünde MySQL için İyi / Daha İyi Yapılandırma


6

MySQL'e adanmış bir EC2 Large örneğim var.

Bir Joomla / Magento combo sunacak, böylece InnoDB ve MyISAM masalarının bir karışımı olacak. Sadece geçmişte MyISAM ile çalıştım ve bu nedenle InnoDB'nin kullandığı ayarları bilmiyorum. InnoDB motorunun devre dışı kalmasına neden olduğum için bugüne kadar yapılan denemeler verimli değildi.

Örneğim Ubuntu 10.04 64 bit sunucu sürümü çalıştırıyor ve ~ 7.5G ram var. MySQL şu anda biraz düşük performansla% 0,6 oranında kullanıyor. Makul olduğu kadar RAM RAM kullanacak şekilde yapılandırmak istiyorum.

Bazı ayarları sınama InnoDB günlüklerinin topluca 4G'den büyük olamayacağını öğrendim.

Kimse benim başlamak için bazı temel InnoDB ve MyISAM ayarları sağlamak mümkün olacaktır.

Teşekkürler Tim

Yanıtlar:


7

EC2'de aynı tür Mysql sunucusunu kullanıyorum. /Etc/mysql/my.cnf öğesine dokunmayın, ancak bunun yerine config dosyalarını /etc/mysql/conf.d/ dizinine koyun. Bu, değişikliklerinizi belirli motorlar için yönetmenize ve işlerin nasıl yapılandırıldığına dair ek ipuçları verdikten sonra yöneticilere vermenize olanak sağlar. . Ayrıca, yaptığınız değişiklikleri yedeklemenizi ve takip etmenizi kolaylaştırır.

/etc/mysql/conf.d/innodb_mysql.cnf

[mysqld]    
# innodb settings 
innodb_additional_mem_pool_size = 12M
innodb_buffer_pool_size         = 2G
innodb_file_per_table           = 1
innodb_flush_log_at_trx_commit  = 2
innodb_lock_wait_timeout        = 180
innodb_log_buffer_size          = 16M
innodb_open_files               = 512
innodb_thread_concurrency       = 0

Bu ayarların çoğu oldukça standart ve kesinlikle Percona'nın tavsiyelerine bakmalısınız . Sisteminizde 6G kadar yüksek olabilirsiniz, ancak küçükten başlardım. Ayrıca myisam tablolarında muhtemelen 4G'de dururdum. Innodb log dosya boyutlarına dokunmazdım, orada olması gereken çok az kazanç var. Log_buffer_size ve include_mem_pool'un arttırılması, ilk çarpma işleminden sonra çok az geri dönüşe sahiptir.

Ayrıca yukarıdaki ayarlar daha iyi performans içindir, işlem tutarlılığı için değildir. Yalnızca bir web uygulamasını çalıştırdığınızı varsayalım, yukarıdaki sorun yoktur, ancak bankacılık sistemi için uygun değildir.

/etc/mysql/conf.d/general_mysql.cnf

[mysqld]
# general settings
key_buffer = 384M

key_buffer, genel olarak Myisam ve Mysql için en kullanışlı olandır. Varsayılan değer, 8GB bir makinede çok küçük olan sadece 16M'dir. Yine iyi bir sıçrama ile başlar ve gelişim olup olmadığını görmek. Unutmayın tamponlarını myisam ve innodb tamponları o değil onlar sahip RAM sonra miktardan daha topluca küçük olması gerekir böylece paylaştı. Daha sonra sıralamaya bakıp tamponları okuyabilirsiniz.


Teşekkür ederim. Test yapmam gerektiğini biliyorum, ancak bu şu anda geliştirilmekte olan bir proje için. Temel ayarlar, Magento'ya ürün girerken çok yavaşlamaya neden oluyor, bu yüzden veri girişi ekibi adına , bir işlemi tamamladıktan sonra sistemi tam olarak kıyaslamayı planladığım bir yere götürmem gerekiyor .
Tim Reynolds

Etki innodb_flush_log_at_trx_commit = 2 ayarının etkisi ne olacak? Yıkama işleminin devre dışı bırakılmasının performansı artıracağını ancak 'D' yi ACID'den çıkartacağımı biliyorum. 2'nin ne yaptığını araştırmam gerekecek.
Tim Reynolds

Floş metodu için O_DIRECT kullandığınızı söylediniz, ancak dökümanlarda, eğer veriler ve loglar bir SAN üzerinde ise, seçicinin performansını 3 faktörü ile düşürebildiğini söyledim . Dev.mysql.com/doc/refman/4.1 / tr /… . Varsayılanı kullanmam gerektiğini mi düşünüyorsun?
Tim Reynolds

"Değer 2 olduğunda, günlük arabelleği her görüşte dosyaya yazılır, ancak diske basma işlemi gerçekleştirilmez. Ancak, günlük dosyasındaki temizleme işlemi, değer olduğunda da saniyede bir kez gerçekleştirilir. 2. İşlem zamanlama sorunları nedeniyle saniyede bir kez yıkama işleminin her saniye gerçekleşmesinin% 100 garantili olmadığını unutmayın. ” Temelde işlemlerden sonra temizlenir, ancak yalnızca saniyede bir kez diske basarsınız (ish).
kashani

O_DIRECT getirmedi, ben görmedim herkes büyük bir gözetimi gibi görünüyor herhangi innodb_flush_method ile EC2 adres performansı. Birkaç Mysql'e ping atıp ne önerdiklerini göreceğim.
kashani

2

Bazı farklı (iyi belgelenmiş) seçenekleri denemeniz ve bazı istatistikler toplamanız gerektiğine inanıyorum, bu yüzden önceden ve sonra karşılaştırmalar yapabilirsiniz, aksi halde yardım ettiğiniz HİÇBİRİDİNİZ, ancak acıtabilirsiniz.

  1. En kolay istatistikler phpmyadmin dışındadır, phpmyadmin'e girer ve sağ çerçevenin üstündeki düğmelerden durumu seçer.

  2. Başka bir iyi araç https://github.com/rackerhacker/MySQLTuner-perl/blob/master/mysqltuner.pl # (v1.2.0) 'dır.

  3. Son olarak yavaş sorgu günlüğünü etkinleştirmek için.

Değişiklik yapmadan önce iyi metrikler elde etmenin kritik öneme sahip olduğunu düşünüyorum, aksi takdirde pantolonunuzun koltuğunun ötesinde, bunun size yardımcı olduğundan emin olamazsınız.

Sık sık READ olan ve nadiren güncellenen / eklenen / eklenen her şeye endeks eklemenin harika olduğunu düşünüyorum.

Geceleri mysqldumps sonra her gece her şeyi iyimser bir tablo yapıyorum.

İnnodb'a özgü seçenekleriniz:

spended #  
[ 14:31. diane@ltk-prod-1 ~]% mysqladmin -u USER -pPASSWD variables | grep -i inno |sed -e 's/                                  //g'|less

Mine are:


| innodb_autoinc_lock_mode | 1::                     |
| innodb_buffer_pool_size  | 8388608::               |
| innodb_checksums         | ON::                    |
| innodb_commit_concurrency| 0::                     |
| innodb_concurrency_tickets              | 500::    |
| innodb_data_file_path    | ibdata1:10M:autoextend::|
| innodb_data_home_dir     |::                       |
| innodb_doublewrite       | ON::                    |
| innodb_fast_shutdown     | 1::                     |
| innodb_file_io_threads   | 4::                     |
| innodb_file_per_table    | ON::                    |
| innodb_flush_log_at_trx_commit          | 1::      |
| innodb_flush_method      |::                       |
| innodb_force_recovery    | 0::                     |
| innodb_lock_wait_timeout | 50::                    |
| innodb_locks_unsafe_for_binlog          | OFF::    |
| innodb_log_buffer_size   | 1048576::               |
| innodb_log_file_size     | 5242880::               |
| innodb_log_files_in_group| 2::                     |
| innodb_log_group_home_dir| ./::                    |
| innodb_max_dirty_pages_pct              | 90::     |
| innodb_max_purge_lag     | 0::                     |
| innodb_mirrored_log_groups              | 1::      |
| innodb_open_files        | 300::                   |
| innodb_rollback_on_timeout              | OFF::    |
| innodb_stats_on_metadata | ON::                    |
| innodb_support_xa        | ON::                    |
| innodb_sync_spin_loops   | 20::                    |
| innodb_table_locks       | ON::                    |
| innodb_thread_concurrency| 8::                     |
| innodb_thread_sleep_delay| 10000::                 |
| innodb_use_legacy_cardinality_algorithm | ON::     |

    enter code here

Bir seferde 2x arabellek oluşturmanızı ve test sorgularını denemenizi öneririm,

FAKAT. Ayrıca, bazı makineler için / dev / shm (ramdisk) bitirdim (16 gb ram yardımcı olur)

ve sonra sadece mysqldumps günde 3 veya 4x yapın.

Benim için mysqltuner, fiziksel koç AŞKI ÜZERİNDE tehlikeli koştuğumu söylüyor, ama ben hala yarım konser serbest gibi görünüyor.


Tehlikeli? Olmadı! Bugün bu ayarların bazılarını uygulayacağım. Tam yazı için teşekkür ederiz.
Tim Reynolds
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.