innodb_flush_method = O_DIRECT vs O_DSYNC performansının LVM disk bölümü ile ext3 üzerindeki etkisi


12

Üretim ortamlarımdan birinde, bir RedHat kümesinde çalışan iki örneğimiz var ve bunlardan biri üretim kümesiyle ilişkili.

RedHat kümesiyle ilişkili olmayan, example1 ve 12G tarafından işgal edilen 24G InnoDB arabellek havuzuna sahip 125G ana belleğimiz var. Hem veri hem de işlem günlükleri, ext3 dosya sistemiyle LVM disk bölümünde bulunur.

Bir performans vermesi için, ve daha iyi I / O verimlilik ben değişime karar verdik innodb_flush_methodiçin O_DIRECT.

MySQL belgelerine referansla:

InnoDB'nin veri ve günlük dosyaları bir SAN üzerinde bulunan yerlerde, ayarı olduğu bulunmuştur innodb_flush_methodiçin O_DIRECTbasit performansını düşürebilir SELECTüç kat ifadeleri.

Yüksek performanslı MySQL Ver 2 ve 3'e bakıldığında, InnoDB geliştiricilerinin kullanımda hata bulduğunu belirtti innodb_flush_method=O_DSYNC. O_SYNCve O_DSYNCbenzer fsync()ve fdatasync(): O_SYNCbuna senkronize iki veri ve meta, O_DSYNCsenkronize veri.

Bunların hepsi tavsiye olmadan çok fazla açıklama gibi görünüyorsa, işte tavsiye:

Unix benzeri bir işletim sistemi kullanıyorsanız ve RAID denetleyicinizde pil destekli bir yazma önbelleği varsa, kullanmanızı öneririz O_DIRECT. Değilse O_DIRECT, uygulamanıza bağlı olarak varsayılan veya muhtemelen en iyi seçim olacaktır.

Google'a göre şu karşılaştırma raporunu aldım : O_DSYNCvsO_DIRECT

Bench Mark Raporu:
===================
1B Sıralı Karmaşık İşlem Testi, 64 diş

 * SAN O_DIRECT: okuma / yazma istekleri: 31560140 (saniye başına 8766.61)
 * SAN O_DSYNC: okuma / yazma istekleri: 5179457 (saniyede 1438.52)
 * SAN fdatasync: okuma / yazma istekleri: 9445774 (saniye başına 2623,66)
 * Yerel disk O_DIRECT: okuma / yazma istekleri: 3258595 (saniyede 905.06)
 * Yerel disk O_DSYNC: okuma / yazma istekleri: 3494632 (saniye başına 970,65)
 * Yerel disk fdatasync: okuma / yazma istekleri: 4223757 (saniyede 1173.04).

Bununla birlikte, O_DIRECTbazı daha iyi G / Ç verimi gösteren çift önbelleklemenin devre dışı bırakılabileceği OS düzeyi önbelleği devre dışı bırakır.

Gitmek O_DIRECTyerine gitmek iyi O_DSYNCmi? Bu iki seçenek biraz kafa karıştırıcı. Hangi seçenek, özellikle üretimde veriler, okumalar / yazmalar üzerinde herhangi bir etki yaratmadan performansta daha iyi I / O verimi ve artış gösterebilir? Kişisel deneyiminize göre daha iyi bir öneriniz var mı?

Ben de Rolando Güncelleme görebiliyordu yazı :

Yine de bu parametrelerin her ikisinde de küçük bir karışıklık var. Nerede kullanarak üretim yapılandırma şablonları çoğu görebiliyordu O_DIRECT, ben herhangi bir yerde tavsiye görmedim O_DSYNC.

sistem

  • MySQL 5.1.51-kurumsal-gpl-pro-log
  • Red Hat Enterprise Linux Sunucu sürüm 5.5
  • Batarya geri yazma önbelleğine sahip Raid Controller ile DELL DRAC 512MB
  • Pil yedekleme birimine (BBU) sahip Dell PERC denetleyicileri H700.

Ek bilgi

mysql> 'innodb_thread_concurrency' gibi değişkenleri gösterir; 

+ --------------------------- + ------- +
| Değişken_adı | Değer |
+ --------------------------- + ------- + 
| innodb_thread_concurrency | 96 |
+ --------------------------- + ------- + 
Sette 1 satır (0.00 sn) 

mysql> 'innodb_read_io_threads' gibi değişkenleri gösterir; 
Boş set (0,00 sn.) 

mysql> 'innodb_write_io_threads' gibi değişkenleri gösterir; 
Boş set (0,00 sn.)

Varsayılan eklentiyi kullanıyoruz, bu yüzden bilgileri InnoDB durumundan gönderdim:

mysql> SEÇİN * PLUGIN_NAME '% innodb%' NEREDE VE PLUGIN_TYPE 'DEPOLAMA MOTORU' GİBİ Eklentilerden
*************************** 1. sıra ******************** *******
           PLUGIN_NAME: InnoDB
        PLUGIN_VERSION: 1.0
         PLUGIN_STATUS: AKTİF
           PLUGIN_TYPE: DEPOLAMA MOTORU
   PLUGIN_TYPE_VERSION: 50151.0
        PLUGIN_LIBRARY: NULL
PLUGIN_LIBRARY_VERSION: NULL
         PLUGIN_AUTHOR: Innobase OY
    PLUGIN_DESCRIPTION: İşlemleri, satır düzeyinde kilitleme ve yabancı anahtarları destekler
        PLUGIN_LICENSE: GPL
Sette 1 satır (0.00 sn)

Yanıtlar:


7

21 Ocak 2009 tarihinde Peter Zaitsev mysqlperformanceblog.com sitesinde şunları söyledi:

Eylem çağrısı olarak - kesinlikle birisinin EXT3'ün Linux için en yaygın dosya sistemi olduğu için bu konuda düzeltilip düzeltilemeyeceğini görmesini isterim. Ayrıca bir şey MySQL tarafında yapılabilir olup olmadığını araştırmak için değer - fsync kullanmak yerine yardımcı olacak O_DSYNCeğer binlog bayrak ile açılış olabilir sync_binlog=1? Veya binlog ön ayırma iyi bir çözüm olabilir.

Şimdilik hiç kimsenin bu konuya değmediğini biliyorum. O_DSYNCvarsayılan olarak çekici bir olasılık değildir, ancak gerçekten doğrulanmamış daha hızlı yazma işlemleri barındırır. Bu yüzden etrafta çok fazla aldatmaca var O_DIRECT.

InnoDB Eklentisinin yüklü olmadığını söyleyebilirim. InnoDB Eklentisi ile çeşitli değişkenler mevcut olmalıdır.

InnoDB'yi iki yoldan biriyle yükseltmelisiniz:

Bunu yaptıktan sonra, InnoDB'yi

  • daha fazla CPU ve Çekirdeğe erişin
  • okuma ve yazma G / Ç iş parçacıklarını artırma
  • G / Ç kapasitesini ölçeklendirme (bu özellikle farklı depolama ortamları için gereklidir)

Bunun için değiştirebileceğiniz ayarlarla ilgili geçmiş yayınlarım:


1

Her zaman O_DIRECTçift ​​tamponlamayı önlediği için performans için daha iyi bir izlenim altındaydım . Ayrıca, pil destekli yazma önbelleğine sahip donanım RAID'inizin olması şartıyla. Elbette, READ veya WRITE ağır olsanız da iş yüküne bağlıdır.

Ayrıca, soru uzmanlar için: ekstra aramaları yapmak fsync()için O_DIRECTneden genel performansında gözle görülür bozulmaya ya da ihmal edilebilir mi? Göstergelerin bunu gösterdiğini henüz görmedim.

Ayrıca, Percona'nın innodb_flush_method=ALL_O_DIRECTyalnızca InnoDB veri dosyalarında değil, aynı zamanda InnoDB işlem günlüklerinde de doğrudan G / Ç sağlayan ayarlama yeteneğini etkinleştirdiğini unutmayın .


2
2012'de tampon havuzu büyük RAM için iyi ölçeklenmedi, bu nedenle bahsi geçen çift tamponlama, OS önbelleğinin innodb tampon havuzundan çok daha büyük olduğu durumlar için iyi olabilir. 5.6 ve üstü için - cevabınızın tamamen geçerli olduğunu söylüyorum.
noonex
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.