Merhabalar, My.cnf (Mysql ayar dosyası) üzerinde birkaç ayar ile
sunucunun mysql kullanım şekline birkaç ekleme yaparak daha verimli bir
veritabanına sahip olacağız.
Öncelikle Sunucuda varsayılan olarak şu anda kullanılan my.cnf ayar dosyasını açın;
Yaptığınız ayarların geçerli olması için mysql yeniden başlatmanız gerekmektedir
Kaynak
Öncelikle Sunucuda varsayılan olarak şu anda kullanılan my.cnf ayar dosyasını açın;
nano /etc/my.cnfÖncelikle bu dosyayı yedeğini alın elinizde bulunsun ardından aşağıdaki optimizasyon için gerekli açıklamaları ve gerekli bilgilendirmeleri okuyarak kendinize göre düzenlemeler yapın.
[client] port = 3306 socket = /tmp/mysqld.sock [mysqld] #genel yapılandırma seçenekleri port = 3306 socket = /tmp/mysqld.sock # sync_binlog, ikili günlüğe yapılan tüm yazmaların derhal olmasını sağlar sync_binlog=1 # back_log, MySQL bağlantı yöneticisi iş parçacığı işlenmeden önce işletim sisteminin dinleme kuyruğunda tutabileceği bağlantıların sayısını belirtir. Çok yüksek bir bağlantı oranına sahipseniz ve "bağlantı reddedildi" hatası yaşarsanız, bu değeri artırmanız gerekebilir. Bu parametrenin maksimum değeri için işletim sisteminizin belgelerine bakın. Back_log'u işletim sistemi sınırından daha yüksek olarak ayarlamaya çalışmanın hiçbir etkisi olmaz. back_log = 50 max_connections = 301 # MySQL'in neden max_connect_errors denetimini devre dışı bırakmadığını bilmiyorum, ancak bunu yapmıyorsa, özellikle de bir yük dengeleyici kullanıyorsanız, MySQL'in renksiz bir sunucudaki bağlantıları kabul etmeyi reddetmesini engellemek için yüksek bir değere ayarlayın! max_connect_errors = 9999999 # Tüm iş parçacıkları için açık tabloların sayısı, mysqld_safe bölümünde açık dosya sınırının en az iki katı olduğundan emin olun table_cache = 4096 # Sunucunun üstesinden gelebilecek bir sorgu paketinin maksimum boyutu. max_allowed_packet = 16M # İşlem sırasında ikili günlük için SQL deyimlerini tutacak önbellek boyutu. Sık sık büyük, çok beyanlı işlemler kullanırsanız, daha fazla performans elde etmek için bu değeri artırabilirsiniz. İşlemlerden gelen tüm ifadeler ikili günlük önbelleğinde arabelleğe alınır ve COMMIT'den hemen sonra ikili günlüğe yazılır. İşlem bu değerden büyükse, bunun yerine diskte geçici dosya kullanılır. Bu arabellek, işlemdeki ilk güncelleme deyimine bağlantı başına ayrılır binlog_cache_size = 1M # Tek bir HEAP (bellekte) tabloda izin verilen maksimum boyut. Bu seçenek, aksi halde tüm bellek kaynaklarını tüketen çok büyük bir HEAP tablosunun yanlışlıkla oluşturulmasına karşı koruma sağlar. max_heap_table_size = 64M # Sıralama arabelleği, bazı ORDER BY ve GROUP BY sorgularını sıralamak için kullanılır. Sıralama verileri sıralama arabelleğine uymuyorsa, bunun yerine bir disk tabanlı birleştirme sırası kullanılır - "Sort_merge_passes" durum değişkenine bakın. Sıralama gerekiyorsa iplik başına tahsis edilir. sort_buffer_size = 8M # Bu arabellek, tam JOIN'lerin optimizasyonu için kullanılır (dizin içermeyen JOIN'ler). Bu gibi JOIN'ler çoğu durumda performans için çok kötüdür, ancak bu değişkeni büyük bir değere ayarlamak performans etkisini azaltır. Tam JOIN'lerin sayısı için "Select_full_join" durum değişkenine bakın. join_buffer_size = 8M # Kaç tane iş parçacığı, bir yeniden önbellekte saklanmalıyız. Bir istemci bağlantısı kesildiğinde, istemcinin iş parçacığı öncekinden çok fazla iş parçacığı_ekliğinden farklı değilse önbelleğe konur. Bu, çok sayıda yeni bağlantınız varsa, gereken iplik oluşturma sayısını büyük ölçüde azaltır. (Normalde, iyi bir iplik uygulamanız varsa, bu önemli bir performans gelişimi sağlamaz.) thread_cache_size = 16 # Sorgu önbellek, SELECT sonuçlarını önbelleğe almak ve daha sonra aynı sorguyu bir kez daha gerçekleştirmeden tekrar iade etmek için kullanılır. Sorgu önbelleğinin etkinleştirilmesi, benzersiz sorgulara ve seyrek olarak değişen tablolara sahip olmanız durumunda önemli ölçüde hızlanma geliştirmesine neden olabilir. Mevcut değerinizin yükünüz için yeterince yüksek olup olmadığını kontrol etmek için durum değişkeni "Qcache_lowmem_prunes" e bakın. Not: Tablolarınızın çok sık değiştiği veya sorgularınızın her seferinde metinden farklı olması durumunda, sorgu önbellek performans iyileştirmesi yerine yavaşlamaya neden olabilir. query_cache_size = 128M # Yalnızca bu sınırdan küçük sonuç kümeleri önbellekle.
Bu, diğer tüm sorgu sonuçlarının üzerine yazılmış çok büyük sonuç kümesinin sorgu önbelleğini korumak içindir. query_cache_limit = 4M # query_alloc_block_size, SQL deyimlerini ve diğer önemsiz bellekleri ayrıştırmak için ne kadar bellek ayırdığını denetler. Olası bellek parçalanmasını azaltmak için karmaşık sorgular çalıştıran kutularda artırıyorum. YMMV varsayılanı 8 k query_alloc_block_size = 16K # İşletim sisteminiz destekliyorsa, takaslamayı önlemek için arabellek havuzunu bu seçeneğiyle belleğe kilitleyebilirsiniz. Linux'un bunu destekleyip desteklemediğinden emin değilim, ancak Solaris bunu yapar. Linux'ta, swapiness sisteminin kullanılması muhtemelen yaklaşık olarak etkilidir. #memlock # CREATE TABLE deyimi sırasında farklı şekilde belirtilmemişse, yeni tablolar oluştururken varsayılan olarak kullanılan tablo türü. default_table_type = InnoDB # Kullanılacak iplik yığını boyutu. Bu hafıza miktarı her zaman bağlantı zamanında saklıdır. Kendi yığın aç UDF işlevlerini kullanırsanız veya işletim sisteminiz bazı işlemler için daha fazla yığın gerektiriyorsa, MySQL'in kendisi genellikle 64 K'den fazla belleğe ihtiyaç duymaz, bunu daha yüksek bir değere ayarlamanız gerekebilir. thread_stack = 192K # Dahili (bellek içi) geçici tablolar için maksimum boyut. Bir tablo bu değerden daha büyük büyürse, otomatik olarak disk tabanlı tabloya dönüştürülür Bu sınırlama tek bir tablo içindir. Birçoğu olabilir. Ayrıca, eğer max_heap_table_size <tmp_table_size, bunun yerine limit olarak kullanılacaktır, bu yüzden daha büyük yapmak yararlı değildir. tmp_table_size = 64M # İkili günlüğe kaydetmeyi etkinleştirin. Bu, bir # kopyalama yapılandırmasında MASTER olarak hareket etmek için gereklidir. En son yedeklemenizden zamanında kurtarmayı yapmak için # yeteneğine ihtiyacınız varsa, ikili günlüğüne de ihtiyacınız vardır. # ikili günlüğü için bir dosya adı belirtmek için önerilir, umarım # ev sahibi tarafından özel olmayan bir şey. Master-bin'i seçtim. log-bin = master-bin # Eğer zincirleme kölelerle çoğaltma kullanıyorsanız (A-> B-> C), sunucu B'de bu seçeneği etkinleştirmeniz gerekir. Kölenin ipliği tarafından yapılan güncellemelerin kölenin ikili günlüğü log_slave_updates # Uyarıları hata günlüğüne günlüğe kaydet log_warnings # Yavaş sorguları kaydedin. Yavaş sorgular "long_query_time" da tanımlanan süreyi aşan veya log_long_format etkinleştirildiğinde dizinleri iyi kullanmayan sorulardır . Sisteme sık sık yeni sorgular eklerseniz, bunun açık olması iyi bir fikirdir. log_slow_queries # Bu süreyi aşan (saniyeler içinde) tüm sorgular yavaş çalışılacaktır. Bir değer olarak "1" i kullanmayın, çünkü bu, zaman zaman çok hızlı sorguların güncellenmesine neden olacaktır (şu an MySQL yalnızca şu an ikinci doğrulukla zamanı ölçmektedir). long_query_time = 1 # Yavaş sorgu günlüğüne daha fazla bilgi günlüğü yazın. Normalde bunun açık olması iyi olur. Bu, uzun süren sorgulara ek olarak dizinleri kullanmayan sorguların günlüğe kaydını sağlayacaktır. log_long_format # Tmpfs'i `tmpdir` ONLAYINIZ TAVSİYE EDİN (BE CAREFUL IF YOU PUT). Eğer bunu yaparsanız slave_load_tmpdir dosyasını bir tmpfs olmayan dosya sistemine ayarlamanız gerekir tmpdir = /tmp slave_load_tmpdir = /tmp # MyISAM tablolar için dizin bloklarını önbelleğe almak için kullanılan Anahtar Arabelleğinin boyutu. Bazı bellek OS tarafından önbellek satırları için de gerektiği için, mevcut belleğinizin% 30'undan daha büyük bir değere ayarlanmayın. MyISAM tablolarını kullanmasanız bile dahili geçici disk tabloları için de kullanılacağı için 8-64M olarak ayarlamanız gerekir. key_buffer_size = 32M # MyISAM tablolarının tam tablo taramaları için kullanılan arabellek boyutu. Tam tarama gerekiyorsa, iplik başına ayrılır. read_buffer_size = 2M # Bir sıralama sonrasında sıralanmış sıralarla satır okurken, disk aramalarından kaçınmak için satırlar bu arabelleğe okunur. Bunu yüksek bir değere ayarlarsanız, ORDER BY performansını çok artırabilirsiniz. Her iş parçacığı için gerektiğinde tahsis edilir. read_rnd_buffer_size = 16M # MyISAM toplu eklemeler yapmak için (yani, INSERT ... SELECT, INSERT ... VALUES (...), (...), ... ve LOAD DATA INFILE) özel ağaç benzeri önbellek kullanır. Bu değişken, önbellek ağacının boyutunu iş parçacığı başına bayt olarak sınırlar. 0 olarak ayarlamak bu optimizasyonu devre dışı bırakır. En iyi performans için "key_buffer_size" değerinden büyük ayarlamayın. Bu arabellek, bir toplu ek algılandığında tahsis edilir. bulk_insert_buffer_size = 64M # Bu arabellek, MySQL'in, TAMİR, OPTİMİZE, ALTER tablo tablolarında ve YÜK VERİLERİNDEN KAYNAKLARDA boş bir tabloda dizini yeniden oluşturması gerektiğinde tahsis edilir. Her iş parçacığı için ayrılır, bu nedenle büyük ayarlara dikkat edin. myisam_sort_buffer_size = 128M # MySQL'in geçici dosyanın maksimum boyutu, dizini yeniden oluştururken (REPAIR, ALTER TABLE veya LOAD DATA INFILE sırasında kullanmaya izin verir.) Dosya boyutu bundan daha büyük olursa, dizin anahtar önbelleği üzerinden oluşturulur Yavaş). myisam_max_sort_file_size = 10G # Hızlı dizin oluşturma için kullanılan geçici dosya, burada belirtilen miktara göre anahtar önbelleğini kullanmaktan daha büyük olursa, anahtar önbellek yöntemini tercih edin. Bu, ağırlıklı olarak büyük tablolardaki uzun karakter anahtarlarını yavaş anahtar önbellek yöntemini kullanarak dizin oluşturmak için zorlar. myisam_max_extra_sort_file_size = 10G # Bir tabloda birden fazla dizin varsa, MyISAM bunları paralel sıralamayla onarmak için birden fazla iş parçacığı kullanabilir. Birden çok işlemciye ve bol miktarda belleğe sahipseniz bu mantıklıdır. myisam_repair_threads = 1 # Düzenli şekilde kapalı MyISAM tablolarını otomatik olarak kontrol edin ve onarın. myisam_recover # BDB desteği etkin olan bir MySQL sunucusu çalıştırıyorsanız, ancak bunu kullanmayı planlamıyorsanız bu seçeneği kullanın. Bu, belleği kurtaracak ve bazı şeyleri hızlandıracaktır. skip-bdb # InnoDB desteği etkinleştirilmiş bir MySQL sunucunuz varsa, ancak bunu kullanmayı planlamıyorsanız bu seçeneği kullanın. Bu bellek ve disk alanından tasarruf sağlayacak ve bazı şeyleri hızlandıracaktır. #skip-innodb # InnoDB tarafından meta veri bilgisini depolamak için kullanılan ek bellek havuzu. InnoDB, bu amaçla daha fazla bellek gerektiriyorsa, işletim sisteminden ayrılmaya başlayacaktır. Bu, en yeni işletim sistemlerinde yeterince hızlı olduğundan normalde bu değeri değiştirmeniz gerekmez. SHOW INNODB STATUS kullanılan geçerli miktarı görüntüler. innodb_additional_mem_pool_size = 32M # Bu yapılandırma dosyası en az 8G'lık bir ana bellek varsayar innodb_buffer_pool_size = 6.5G # tablo başına innodb dosyası için tablo alanı boyutlarını belirleyemezsiniz, bu nedenle büyük bir autoextend kullanmak bu durumlarda tercih edilir. innodb_data_file_path = ibdata1:1G:autoextend innodb_autoextend_increment=128M innodb_file_per_table # InnoDB tablolama dosyalarının başka bir konumda saklanmasını isterseniz bu seçeneği ayarlayın. Varsayılan olarak bu MySQL datadir. #innodb_data_home_dir = # InnoDB çekirdeğinde izin verilen iş parçacığı sayısı. En iyi değer, uygulamaya, donanıma ve OS zamanlayıcı özelliklerine bağlıdır. Çok yüksek bir değer, iplik parçalanmasına neden olabilir. innodb_thread_concurrency = 16 # 1 olarak ayarlanırsa, InnoDB işlem günlüğünü ACID davranışı sunan her bir taahhütteki diske boşaltacaktır (fsync). Bu güvenliği tehlikeye atmaya hazır iseniz ve küçük işlemler yürütüyorsanız, disk G / Ç'yi günlüklere azaltmak için bunu 0 veya 2 olarak ayarlayabilirsiniz. Değer 0, günlüğün yalnızca günlük dosyasına yazıldığı ve günlük dosyası saniyede yaklaşık bir kere diske boşaltıldığı anlamına gelir. Değer 2, günlüğün her taahhütte günlük dosyasına yazıldığı anlamına gelir, ancak günlük dosyası yalnızca yaklaşık saniyede bir kez diske boşaltılır. innodb_flush_log_at_trx_commit = 1 # InnoDB kapatma işlemini hızlandırın. Bu, InnoDB'nin bir tam boşaltma yapmak ve kapatma işleminde arabellek birleştirme ekini devre dışı bırakacaktır. Kapatma süresini çok artırabilir, ancak InnoDB bunun yerine bir sonraki başlangıçta bunu yapmak zorunda kalacaktır. #innodb_fast_shutdown # InnoDB'nin günlük verisini arabelleğe almak için kullandığı arabellek boyutu. Dolduğunda, InnoDB diske boşaltmak zorunda kalacaktır. Her neyse saniyede bir kez boşaltıldığı için, çok büyük olması mantıklı değil (hatta uzun işlemlerde). innodb_log_buffer_size = 8M # günlük dosyalarının, günlükler döndüğünde kontrol noktalarını tutmaması için yeterince büyük olduğundan emin olun! innodb_log_file_size = 1G # Günlük grubundaki toplam dosya sayısı. 2-3 değeri genellikle yeterlidir. innodb_log_files_in_group = 2 # LVM'yi kullanırsanız ve sıcak yedekleme için dosya sisteminizi anlık olarak görüntülemeyi planlıyorsanız dikkatli olun. bunun çalışması için günlük dosyalarınız veri dosyalarınızla aynı mantıksal hacimde olmalıdır. #innodb_log_group_home_dir # InnoDB arabellek havuzundaki kirli sayfaların izin verilen maksimum yüzdesi. Buna ulaşılırsa, InnoDB onları temiz sayfalardan hiç kaçınmamak için agresif bir şekilde yıkamaya başlayacaktır. Bu, yumuşak bir sınır olup, tutulması garanti edilmez. innodb_max_dirty_pages_pct = 80 # mümkün olduğunda dosya sistemi önbelleklerini için direction'u kullanın innodb_flush_method=O_DIRECT # Ne kadar bir InnoDB işlemi, geri alınmadan önce bir kilidin verilmesi için beklenmelidir. InnoDB, kendi kilit tablosundaki işlem kilitlenmelerini otomatik olarak algılar ve işlemi geri alır. LOCK TABLES komutunu veya aynı işlemde InnoDB'den başka işlemle güvenli depolama motorlarını kullanırsanız, InnoDB'nin fark edemediği bir kilitlenme ortaya çıkabilir. Böyle durumlarda zaman aşımı durumu çözmek için yararlıdır. innodb_lock_wait_timeout = 120 # Bu yapılandırmayla, muhtemelen yine de önemi kalmaz, çünkü ikili günlüğü etkinleştirilir; bu, izolasyon seviyesi seri hale getirilemese bile seri hale getirilmiş taahhütleri zorlar. innodb_commit_concurrency=0 innodb_open_files=2000 # [mysqldump] # Dosyaya yazmadan önce tüm sonuç kümesini belleğe tamponlamayın. Çok büyük masaları boşaltmak için gereklidir quick max_allowed_packet = 16M [mysql] no-auto-rehash # Yalnızca anahtarları kullanan GÜNCELLEMELER ve SİLLER'e izin verin. #safe-updates [isamchk] key_buffer = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [myisamchk] key_buffer = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [mysqlhotcopy] interactive-timeout [mysqld_safe] # İşlem başına izin verilen açık dosya sayısını artırın. Uyarı: Global sistem limitini yeterince yüksek ayarladığınızdan emin olun! Çok sayıda açılmış tablo için yüksek değer gereklidir open-files-limit = 16384Şimdi bu açıklamalara dayanarak sunucunuz için en iyi performansı alacağını düşündüğünüz değerleri siz verin ve my.cnf dosyasını kaydedip kapatın.
Yaptığınız ayarların geçerli olması için mysql yeniden başlatmanız gerekmektedir
service mysql restart veya service mysqld restartİşlemler tammalanmış durumdadır Mutlu günler.
Kaynak
0 yorum:
Yorum Gönder