5 Nisan 2019 Cuma

My.cnf Ayarları ve Açıklamaları

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;
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