• 28-09-2008, 17:44:44
    #1
    Üyeliği durduruldu
    Merhaba,
    Dual xeon 2.8 işlemci, 2gb ram sunucuyu günlük yaklaşık 50000 ziyaretçiyi sorunsuz şekilde kaldıracak şekilde nasıl optimize etmek lazım?

    Sayfalar veriyi mysqlden çekiyor, genelde txt ağırlıklı ama tasarım vs den kaynaklanan resim sayısı da az sayılmaz.

    httpd.conf ve my.conf dosyalarında ne gibi değişiklikler yapmalıyım? bunlar dışında sunucu performansını arttırmak ve sunucunun çökmesini engellemek için neler yapabilirim?

    Teşekkürler.
  • 06-10-2008, 10:38:50
    #2
    Administrator
    50K ve üstü için tabi ki Cluster yapmayı öneririm

    Hit artınca MySQL ve Apache veya bir başka webserverın birlikde çalışması makinayı kastırabiliyor güzel bir optimasyonla bir nebze önlem almış olursunuz.

    50K ya yada 100K ya göre my.cnf vermek heralde loto oynamak gibi bişey olur. Çünkü
    MySQL 'i Kullanan scriptler vBulletin, Smf vb. kullanım yogunlugu yaratılan indexlerin yetip yetmediği uzun süren sorgular vb. gibi bir çok fonksiyonlardan etkilenen ince ayar gerektiren bir veritabanı.

    Öncelikle MySQL sunucunuzu minimum 2 gün ( 48 saat ) çalıştırın huyunu suyunu kavrasın makina

    daha sonra

    Kurulum:

    SSH root olarak giriş yapın ve aşağıdaki komutu yazın,


    wget http://day32.com/MySQL/tuning-primer.sh
    Ardından CHMOD düzenleyin


    chmod 775 tuning-primer.sh
    MYSQL durum sınaması için yapmamız gereken ,



    ./tuning-primer.sh
    Çalıştırın ve Çıkanları buraya yapıştırın. böylece Kullanımınıza göre güzel bir ayar verebilirim.
  • 06-10-2008, 21:48:17
    #3
    Üyeliği durduruldu
    Cevap için teşekkürler.
    Cluster yapma imkanım maalesef yok şuan için. Sunuc tahmin ettiğim gibi siteyi taşıyınca problem çıkarmaya başladı. Top komutunda mysql kullanımı ortalama %60 gibi fakat bazen %100ü aşıyor. Ram kullanımı 1gb civarında boşta 1 gb ram var.
    Siteler arada çok çok yavaşlıyor ve daha sonra açılmamaya başlıyor. İşin ilginci ben whm paneli kullanmaya devam edebiliyorum. Ordan httpd restart yapınca sunucu kendine geliyor ve 10 dk sonra tekrar siteler ya tam açılmıyor ya da çok geç açılıyor.
    Mysql'e ssh ile bağlantı kurmada vs de bir sorun yok. Hatta uzak mysql management programları ile mysql yönetmeye devam edebiliyorum sitelere ulaşılamadığı zaman.
    Önermiş olduğunuz scripti çalıştırdım sonuç aşağıda:
    mysqld is alive
            -- MYSQL PERFORMANCE TUNING PRIMER --
                 - By: Matthew Montgomery -
    MySQL Version 5.0.51a-community i686
    Uptime = 8 days 23 hrs 30 min 44 sec
    Avg. qps = 31
    Total Questions = 24767892
    Threads Connected = 7
    Server has been running for over 48hrs.
    It should be safe to follow these recommendations
    To find out more information on how each of these
    runtime variables effects performance visit:
    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
    Visit http://www.mysql.com/products/enterprise/advisors.html
    for info about MySQL's Enterprise Monitoring and Advisory Service
    SLOW QUERIES
    The slow query log is NOT enabled.
    Current long_query_time = 10 sec.
    You have 8 out of 24767921 that take longer than 10 sec. to complete
    Your long_query_time may be too high, I typically set this under 5 sec.
    BINARY UPDATE LOG
    The binary update log is NOT enabled.
    You will not be able to do point in time recovery
    See http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html
    WORKER THREADS
    Current thread_cache_size = 0
    Current threads_cached = 0
    Current threads_per_sec = 3
    Historic threads_per_sec = 1
    Threads created per/sec are overrunning threads cached
    You should raise thread_cache_size
    MAX CONNECTIONS
    Current max_connections = 100
    Current threads_connected = 7
    Historic max_used_connections = 66
    The number of used connections is 66% of the configured maximum.
    Your max_connections variable seems to be fine.
    MEMORY USAGE
    Max Memory Ever Allocated : 195 M
    Configured Max Per-thread Buffers : 268 M
    Configured Max Global Buffers : 17 M
    Configured Max Memory Limit : 286 M
    Physical Memory : 1.97 G
    Max memory limit seem to be within acceptable norms
    KEY BUFFER
    Current MyISAM index space = 17 M
    Current key_buffer_size = 7 M
    Key cache miss rate is 1 : 3155
    Key buffer fill ratio = 54.00 %
    Your key_buffer_size seems to be fine
    QUERY CACHE
    Query cache is supported but not enabled
    Perhaps you should set the query_cache_size
    SORT OPERATIONS
    Current sort_buffer_size = 2 M
    Current read_rnd_buffer_size = 256 K
    Sort buffer seems to be fine
    JOINS
    Current join_buffer_size = 132.00 K
    You have had 634 queries where a join could not use an index properly
    You should enable "log-queries-not-using-indexes"
    Then look for non indexed joins in the slow query log.
    If you are unable to optimize your queries you may want to increase your
    join_buffer_size to accommodate larger joins in one pass.
    Note! This script will still suggest raising the join_buffer_size when
    ANY joins not using indexes are found.
    OPEN FILES LIMIT
    Current open_files_limit = 1024 files
    The open_files_limit should typically be set to at least 2x-3x
    that of table_cache if you have heavy MyISAM usage.
    Your open_files_limit value seems to be fine
    TABLE CACHE
    Current table_cache value = 64 tables
    You have a total of 326 tables
    You have 64 open tables.
    Current table_cache hit rate is 0%, while 100% of your table cache is in use
    You should probably increase your table_cache
    TEMP TABLES
    Current max_heap_table_size = 16 M
    Current tmp_table_size = 32 M
    Of 5491605 temp tables, 7% were created on disk
    Effective in-memory tmp_table_size is limited to max_heap_table_size.
    Created disk tmp tables ratio seems fine
    TABLE SCANS
    Current read_buffer_size = 128 K
    Current table scan ratio = 26 : 1
    read_buffer_size seems to be fine
    TABLE LOCKING
    Current Lock Wait ratio = 1 : 533
    You may benefit from selective use of InnoDB.
    If you have long running SELECT's against MyISAM tables and perform
    frequent updates consider setting 'low_priority_updates=1'
    If you have a high concurrency of inserts on Dynamic row-length tables
    consider setting 'concurrent_insert=2'.
  • 07-10-2008, 09:14:02
    #4
    Administrator
    Şuanda Kullandığınız my.cnf uda koyarmısınız

    cat /etc/my.cnf
  • 07-10-2008, 09:28:34
    #5
    Üyeliği durduruldu
    Şuan kullanılan my.cnf dosyasında sadace şu satırlar var;
    [mysqld]
    set-variable = max_connections=500
    safe-show-database
    Ayrıca dün apache error logları inceledim ve tıkanmanın olduğu zamanlarda sunucunun
    "[error] server reached MaxClients setting, consider raising the MaxClients setting"
    şeklinde hatalar verdiğini farkettim. Bunun üzerine httpd.conf dosyasını şu şekilde yeniden düzenledim.

    Timeout 20
    
    <IfModule prefork.c>
        StartServers 10
        MinSpareServers 30
        MaxSpareServers 50
        ServerLimit 256
        MaxClients 200
        MaxRequestsPerChild 1000
    </IfModule>
    Henüz sabah olduğu için sitelerde trafik yok, o yüzden test edemedim sorunu çözüp çözmediğini. Sizce MaxClients değerini yükseltmek çözüm olabilir mi? Daha başka ne yapabilirim?

    Teşekkürler yardımlar için..
  • 07-10-2008, 09:47:16
    #6
    Administrator
    Önce my.cnf 'u ayarlayıp durumu kontrol edlim 1-2 gün mysql 'u takip edin performans ve daha az cpu kullanması açısından.

    bunları my.cnf olarak Kullanın 2 gün kontrol edin ve tekrar o script 'i calıştırıp çıktıları buraya yapıştırın.

    [mysqld]
    skip-name-resolve
    local-infile=0
    safe-show-database
    back_log = 50
    skip-innodb
    max_connections = 200
    long_query_time = 4
    key_buffer = 128M
    max_allowed_packet = 30M
    myisam_sort_buffer_size = 64M
    table_cache = 400
    tmp_table_size = 128M
    query_cache_type = 1
    query_cache_size = 7M
    query_cache_limit = 6M
    query_prealloc_size = 262144
    query_alloc_block_size = 65536
    transaction_alloc_block_size = 8192
    transaction_prealloc_size = 4096
    max_write_lock_count = 16
    thread_cache_size = 128
    log-queries-not-using-indexes
    join_buffer_size = 3M
    read_buffer_size = 2M
    sort_buffer_size = 2M
    read_rnd_buffer_size = 256K
    wait_timeout = 30
    connect_timeout = 30
    interactive_timeout= 30
    table_lock_wait_timeout = 30
    old-passwords = 1
    low_priority_updates = 1
    concurrent_insert=2
    default-storage-engine = MyISAM
    
    
    #required unique id between 1 and 2^32 - 1
    server-id       = 1
    
    
    [mysql]
    no-auto-rehash
    
    
    [mysqldump]
    quick
    quote-names
    max_allowed_packet = 1000M
    
    
    [myisamchk]
    tmpdir=/temp
    key_buffer = 64M
    sort_buffer_size = 64M
    read_buffer = 16M
    write_buffer = 16M
    
    
    [mysqlhotcopy]
    interactive-timeout
  • 07-10-2008, 10:10:19
    #7
    Üyeliği durduruldu
    Teşekkürler, 2 gün sonra yeni durum hakkında bilgi veririm.
  • 09-10-2008, 09:05:25
    #8
    Administrator
    Son durum nedir. ?
  • 10-10-2008, 09:50:59
    #9
    Üyeliği durduruldu
    Merhaba,
    httpd.conf dosyasını eski haline alıp mysql değişikliklerini yaptım fakat aynı gün içinde tekrar kapanmalar olunca log dosyasını incelediğimde yine max client error verdiğini gördüm.
    Bunun üzerine httpd.conf dosyasını
    Timeout 20
    <IfModule prefork.c>
        StartServers 10
        MinSpareServers 30
        MaxSpareServers 50
        ServerLimit 256
        MaxClients 200
        MaxRequestsPerChild 1000
    </IfModule>
    şeklinde ayarladım.
    My.cnf dosyasını httpd.conf dosyasını test edebilmek için pek değiştirmedim sadece şu bi kaç satırı ekledim;
    [mysqld]
    set-variable = max_connections=500
    safe-show-database
    table_cache = 340
    query_cache_size = 8M
    thread_cache_size = 4
    İki gündür kapanmadı neyseki. Load değerleri 1-2 civarında geziniyor en yoğun zamanlarda. Max client error hatasıda artık yok.
    Yeni mysql raporu şu şekilde;
    Server has been running for over 48hrs.
    It should be safe to follow these recommendations
    To find out more information on how each of these
    runtime variables effects performance visit:
    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
    Visit http://www.mysql.com/products/enterprise/advisors.html
    for info about MySQL's Enterprise Monitoring and Advisory Service
    SLOW QUERIES
    The slow query log is NOT enabled.
    Current long_query_time = 10 sec.
    You have 1 out of 13390150 that take longer than 10 sec. to complete
    Your long_query_time may be too high, I typically set this under 5 sec.
    BINARY UPDATE LOG
    The binary update log is NOT enabled.
    You will not be able to do point in time recovery
    See http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html
    WORKER THREADS
    Current thread_cache_size = 4
    Current threads_cached = 3
    Current threads_per_sec = 0
    Historic threads_per_sec = 0
    Your thread_cache_size is fine
    MAX CONNECTIONS
    Current max_connections = 500
    Current threads_connected = 1
    Historic max_used_connections = 34
    The number of used connections is 6% of the configured maximum.
    You are using less than 10% of your configured max_connections.
    Lowering max_connections could help to avoid an over-allocation of memory
    See "MEMORY USAGE" section to make sure you are not over-allocating
    MEMORY USAGE
    Max Memory Ever Allocated : 117 M
    Configured Max Per-thread Buffers : 1 G
    Configured Max Global Buffers : 25 M
    Configured Max Memory Limit : 1 G
    Physical Memory : 1.97 G
    Max memory limit seem to be within acceptable norms
    KEY BUFFER
    Current MyISAM index space = 17 M
    Current key_buffer_size = 7 M
    Key cache miss rate is 1 : 8664
    Key buffer fill ratio = 62.00 %
    Your key_buffer_size seems to be fine
    QUERY CACHE
    Query cache is enabled
    Current query_cache_size = 8 M
    Current query_cache_used = 4 M
    Current query_cache_limit = 1 M
    Current Query cache Memory fill ratio = 53.89 %
    Current query_cache_min_res_unit = 4 K
    MySQL won't cache query results that are larger than query_cache_limit in size
    SORT OPERATIONS
    Current sort_buffer_size = 2 M
    Current read_rnd_buffer_size = 256 K
    Sort buffer seems to be fine
    JOINS
    Current join_buffer_size = 132.00 K
    You have had 170 queries where a join could not use an index properly
    You have had 1 joins without keys that check for key usage after each row
    You should enable "log-queries-not-using-indexes"
    Then look for non indexed joins in the slow query log.
    If you are unable to optimize your queries you may want to increase your
    join_buffer_size to accommodate larger joins in one pass.
    Note! This script will still suggest raising the join_buffer_size when
    ANY joins not using indexes are found.
    OPEN FILES LIMIT
    Current open_files_limit = 2500 files
    The open_files_limit should typically be set to at least 2x-3x
    that of table_cache if you have heavy MyISAM usage.
    Your open_files_limit value seems to be fine
    TABLE CACHE
    Current table_cache value = 340 tables
    You have a total of 326 tables
    You have 340 open tables.
    Current table_cache hit rate is 21%, while 100% of your table cache is in use
    You should probably increase your table_cache
    TEMP TABLES
    Current max_heap_table_size = 16 M
    Current tmp_table_size = 32 M
    Of 1541315 temp tables, 20% were created on disk
    Effective in-memory tmp_table_size is limited to max_heap_table_size.
    Created disk tmp tables ratio seems fine
    TABLE SCANS
    Current read_buffer_size = 128 K
    Current table scan ratio = 1204 : 1
    read_buffer_size seems to be fine
    TABLE LOCKING
    Current Lock Wait ratio = 1 : 96
    You may benefit from selective use of InnoDB.
    If you have long running SELECT's against MyISAM tables and perform
    frequent updates consider setting 'low_priority_updates=1'
    If you have a high concurrency of inserts on Dynamic row-length tables
    consider setting 'concurrent_insert=2'.