Sunucuyu bir zamanlamayla yeniden başlatmak performans için iyi bir fikir olabilir mi?


14

Bir programı bir programda yeniden başlatmanın performans için iyi bir fikir olup olmadığını merak ediyorum.

Diyelim ki sunucuyu 2 gece 02: 00'da yeniden başlatmak istiyoruz.

Buradaki sunucu Windows Server 2008 R2. Temel olarak, SQL Server ve IIS 7.5 (yaklaşık 15 uygulama çalışıyor) bu sunucu altında çalışmaktadır. Sunucuda 4GB bellek var.


9
Aslında performans sorunlarınız mı var? , Windows edebilirsiniz yeniden başlatılması olmadan yıllarca devam. Bu olmamalı yamalar yüklü olması gerekir çünkü, bir yeniden başlatma olmadan bu kadar uzun süre gitmek, ama kesinlikle mümkündür. Şahsen ben tamamen izole bir ağda <kontroller> 489 gün kalmış bir sunucum var . Hala iyi çalışıyor ve performans kabul edilebilir.
Ben Pilbrow

6
Ben sınırlı bellek veya CPU olduğunda bunu varsayalım. - yanlış varsayıyorsun.
Rob Moir

4
Bu göreve aşağı oy veren kişi nedenini açıklamalıdır. İyi açıklanmış bir soru ve bununla ilgili yanlış bir şey yok.
tugberk

17
Yapmanız gereken doğru şey , yalnızca yeniden başlatmak değil, neden sorun yaşadığınızı gidermektir. Düzenli olarak yeniden başlatılan bilgisayarlara masaüstü adı verilir.
Bart Silverstrim

4
Bazı sorular da kötü bir fikir olduğu için aşağı düşebilirler; bir örnek şu an akla gelmiyor. Bunun birçok nedeni var. İnsanlar garip. Kötü ve kötü yargıların üstesinden gelmek için genel sağduyuya güveniyoruz. Bu yüzden bir topluluk Q / A sitesi.
Bart Silverstrim

Yanıtlar:


32

Ben SQL Server Agent durduruyor yorumunuza dayanarak, kutuyu yeniden başlatmanın yanlış bir şey olduğunu kabul ederken, bazı ek kök neden analizi tavsiye ediyorum. Hizmetler genellikle durmaz ve SQL Server Agent hizmetleri genellikle deneyimlerime göre bu şekilde hareket etmez.

Olay günlüklerini incelemek ve yanlış bir şey "görüp görmediğini" görmek için Günlük Performans Analizi (PAL) ile analiz edebileceğiniz uzun vadeli bir performans sayacı günlüğü çalıştırmak için iyi bir şekilde yapacağınızı düşünüyorum. Başka hiçbir şey yoksa, SQL Agent durdurma ile ilişkili olayları diğer faktörlerle ilişkilendirmeye çalışmalısınız.


2
"addt'l" ? Satır 2'deki ayrıştırma hatası
Tomas

@tugberk - cevap bu ise, Evan tarafından önerilen analiz sonra SQL Agent durdurma sebebi neydi?
Ağustos

@fluffy: Hey oradaki! Seni burada görmek çok güzel! "Gerçek adımı" bildiğini bilmiyorum. 2003-2005 zaman diliminden eski bir Song Fight tanıdım. Berbat synth-pop ve çöplük vizyonlarını çağrıştıran bir "grup" adı düşünün ve hatırlayabilirsiniz.
Evan Anderson

Peki, bu oldukça offtopik! Merhaba Ayarlayıcı. ;) (Bu elbette e-postaya götürülmelidir, ancak adresinizi bulamıyorum.)
kabarık

38

Performansı artırmak için bilgisayarı yeniden başlatmak istiyorsanız, muhtemelen sonunda bellek yönetimi sorunları ile karşılaştığınız anlamına gelir.

Önbellekleme İyi

Bir şey olursa, yeniden başlatma sunucuları daha ideal bir ortamda performansa (ve tabii ki çalışma süresine) zarar verir . Hesaplamada performansın temel ilkelerinden biri önbelleklemeden yararlanmak (hızlı bellekte veri bulunması). Her yeniden başlattığınızda önbelleğinizi patlatırsınız. Bu hem SQL sunucusu hem de IIS için geçerlidir. İdeal ortama sahip olmasanız da, aşağıdakiler, sunucuyu bir zamanlamaya göre yeniden başlatmaktan daha iyi bir seçenek için size yardımcı olacaktır.

IIS Bellek Sızıyor mu?

Şimdi bunun IIS 7.5 olduğunu söylediniz. Her ne kadar iç karartıcı bulsam da, IIS 7.5 üzerinde çalışan pek çok web uygulamasında bellek sızıntıları var, IIS'deki varsayılanlar her X dakikada bir APP'yi yeniden başlatmak ve bir APP havuzu boştaysa kapatmaktır. İdeal olan, bellek sızıntılarını düzeltmektir - ancak yapamıyorsanız bellek limitleri ve zamanlayıcıları içeren bu ayarları yapabilirsiniz . Hangi w3wp işleminin belleği kullandığını anlamak için perfmon kullanabilirsiniz. Biraz acı ama app havuzu ile geri bağlayabilirsiniz %systemroot%\system32\inetsrv\APPCMD list wps.

SQL Belleği

Önbelleklemeye geri dönersek, SQL hangi belleği alabileceğini alacaktır. Bunu SQL sunucusunun özelliklerinde sınırlandırabilirsiniz. Belleği sınırlamazsanız ve kutuda IIS çalıştırıyorsanız, bunlar bellek öldürme performansı için savaşmaya başlayabilir. Bu mükemmel makale bu konuyu ayrıntılı olarak ele almaktadır: Sysadmin'in Microsoft SQL Belleği Kılavuzu .

Denge

Aynı kutuda hem IIS hem de SQL bulunduğundan, bellek kullanımlarını dengelemeniz gerekir. Bunu yapmazsanız, tekrar diske takas edilmesi muhtemel olan bellek alabilirsiniz - bu korkunç bir yerdir (Takas etkinliği için perfmon sayaçları olmalıdır). IIS Geri Dönüşüm ayarlarını ve SQL Bellek sınırlarını kullanarak, bu sistemi kararlı hale getirebilmeniz gerekir. Bunu dengelemek için 4GB'tan daha fazla belleğe ihtiyacınız olabilir. Ayrıca, bir seçenekse, SQL sunucusunu özel bir makineye koymanızı şiddetle tavsiye ederim - performansı çok daha iyi hale getirecek ve işleri basitleştirecektir.


İnanılmaz cevap Kyle, keşke SBS2011 performans ile ilgili sorularımda bu aylardan birini olsaydı! Bahsettiğim şeylerin her birini kendi (aylarca süren) araştırmamla vurdum. Hâlâ sorunları vuruyor ama bu başka bir mesele.
HaydnWVN

12

Ben belirli bir sorunu çözmek için bir araç olarak değil, özellikle bir zamanlama sunucuları yeniden önyükleme savunucusu değilim. Bir performans sorununu çözmek için bu sunucuyu yeniden başlatmanız gerekiyorsa, sorunun daha iyi bir yolu sorunun nedenini bulmak ve çözmek. Sunucuyu düzenli olarak yeniden başlatmak yalnızca temeldeki sorunu gizlemektir.


5

Önemli bellek sızıntılarınız varsa, neden olmasın - aksi takdirde güncellemelerle aylık olarak yeniden başlatın.


Bahşiş için teşekkürler. Şimdi görev yöneticisine bakıyorum ve sistemin belleğin% 75'ini kullandığını görüyorum.
tugberk

6
SQL Server çalışıyorsa, bu beklenen bir durumdur. SQL Server çalışabileceği tüm belleği kullanmaya çalışacaktır (ve izin vermelisiniz).
Ben Pilbrow

4
bu, bellek sızıntılarınız olduğu anlamına gelmez. Kullanılacak bellek var. Bellek sızıntılarını iyileştirmek için yeniden başlatmak mükemmel bir pragmatik çözümdür, ancak uzun vadede daha iyi bir çözüm, onlara neden olan hatayı bulmak ve düzeltmektir.
Rob Moir

1
@tugberk: Cevabımda belirttiğim gibi, SQL Server Agent hizmetinin bellek basıncı koşulları nedeniyle durması benim deneyimim olmadı. Muhtemelen bu koşullar altında olacak, ancak o noktaya geldiğiniz zaman diğer hizmetlerle ilgili problemler görmenizi beklerdim (çünkü muhtemelen oldukça şiddetli olurdu).
Evan Anderson

2
Eğer hafıza olsaydı, takasın "ölmeden" önce sertçe vurulduğunu görmelisin, diye düşünüyorum. Bellek her zaman önbellekleme için mümkün olduğunca kullanılacaktır. Muhtemelen önce veritabanı kullanımınızı analiz etmek için araçlar kullanmalısınız. Ve 15 uygulama çalıştırıyorsanız ve bellekte sıkıysanız (4 uygulamada 15 uygulama + veritabanı? Bunlar ne kadar büyük?
Bart Silverstrim

2

Sunucuyu gerçekten bir zamanlamaya göre yeniden başlatmak istiyorsanız (yukarıda belirtilen bellek sızıntıları veya güncellemeleri veya başka bir nedenden dolayı) - neden bir küme çözümüne bakmıyorsunuz? Paralel olarak başka bir sunucu koyun, bir yük dengeleyicisine bağlayın (basit bir tane bile) ve hizmet zamanını kaybetmeden veya sunucunun hiç önyükleme yapmayacağından endişe etmeden istediğiniz kadar yeniden başlatabilirsiniz ve dışarıda olacaksın.


1

Bu korkunç bir fikir değil , ama eğer sadece 'voodoo' ise, muhtemelen size çok yardımcı olmayacaktır.

Ancak, bunun performansınızı artırma konusundaki araştırmanızın sona ermesine izin vermemenin iki nedeni vardır.

Bunlardan biri gelecekteki ölçeklenebilirliktir. Kesintileriniz yükün, belirli sayıda sorgunun, önbelleğe alma, sorgu derleme veya btree dizinleme hatasına neden olan belirli bir sorgu veya şu anda günlük olarak yinelenen diğer sorunların sonucuysa, muhtemelen yük olarak daha sık ortaya çıkarlar zamanla artar. Tomurcuk içinde kıstır.

Diğer sorun, yeniden başlatma sırasında bağımlı hizmetlerden gelen istekleri durdurmanız gerekeceğinden şüpheleniyorum. Az önce operasyonel bir kadans yarattınız. Bazı günlük görevlerin her çalıştırılması gerektiğinde, yeniden başlatmanıza bağlanır. Bir noktada, altı saat süren bu devasa yeniden başlatmalara sahip olacaksınız (burada abartmıyorum, birden fazla şirkette olduğunu gördüm) ve kimse neden her şeyin neden durdurulması ve yeniden başlatılması gerektiğini hatırlamayacak Gecenin.

Benim önerim SQL sürecini izlemek ve gerektiğinde yeniden başlatmak olacaktır. Daha önceki bir posterin de belirttiği gibi, SQL, insanların düşündükleri bellek sızıntısına sahip değildir (ve bunu 90'ların ortasında MSSQL ekibinde olan bir kişi olarak söylüyorum). Sen istiyorsun veritabanı sunucusu neredeyse% 100 bellek ve CPU kullanımı. Daha az bir şey kaynakları boşa harcıyor.


0

Yazdığınız kod ve bellek sızıntıları azsa, yeniden başlatma, ayrılan belleği havuza geri döndürmenin tek yolu olabilir. Belleğe bağlı süreçleriniz varsa, temiz bir duruma havuzun bu yenilenmesi kesinlikle bir süre için performansı artırabilir ..... Ancak bu, performans sorunlarını ele almak için gerçekten kötü bir yoldur, asıl neden çivilenmeli ve düzeltilmelidir.

Aksi takdirde, yamaları / uygulamaları / verileri geri yüklemek için bir bakım penceresine ihtiyacınız olana kadar çalıştırın. Bu, bir performans mühendisinin söz konusu sunuculara tam olarak neden / hangi sorunları zorladığı konusunda bir göz atmasını önermek için iyi bir zaman olabilir.


0

Kendi başına tam bir cevap olmasa da , sunucuya biraz daha RAM eklemek uygun bir seçenek midir? 4GB, bir IIS / SQL Server makinesi için düşük taraftadır. Gerçekte adanmış bir sunucu birimi veya hizmete alınmış bir masaüstü olmasına bağlı olarak, oldukça düşük bir maliyetle 8GB veya daha fazlasını elde edebilirsiniz. Bir sunucu ise, standart masaüstü RAM'den biraz daha pahalıya mal olabilir, ancak zorunlu yeniden başlatmalar arasında size biraz daha zaman kazandıracaktır.

Bunu söyleyerek, SQL Server'ı RAM'in maksimum% 80'ini kullanacak şekilde sınırlandırabileceğinizi veya tam olarak neyin yanlış gittiğini ve / veya hizmetin neden durduğunu anlamak için günlüklere bakıp bakamayacağınızı görün.


0

Eğer Windows sunucularınız varsa ve herhangi bir yama yaması izliyorsanız, SQL sorunu ile ilgisi olmayabilir. "BÜYÜK ÇOK ULUSAL" için çalıştığımda aylık yama yapmak zorunda kaldık ve tüm sunucularımız ayda en az bir kez yeniden başlatıldı.


0

Bunu 3 sunucuda yapıyorum, 1 bizim ve 2 müşterimiz. Çeşitli nedenlerle kurdum - bir sunucu 2008R1 kurulum için bekleyen birçok güncelleme var, ancak toplu olarak yükleyemiyorum, bu yüzden her gün tek tek yüklüyorum; başka bir sunucu 2012R2 - önyükleme sorun giderme ve bazı performans sorunları vb için. Diğer sabit bir periyodik yeniden başlatma zamanlamak için kötü bir uygulama olduğunu sanmıyorum Bu özellikle çeşitli donanım ve yazılım sorunları, özellikle otomatik başlatma dahil olanlar .


-2

Sadece Windows sunucularını her gece yeniden başlatmakla kalmayan, hatta bazıları her 24 saatte bir yeniden yüklenen büyük bir şirket biliyorum. Onlar için gerekli yazılım ve güvenlik sorunları bellek pırasa nedeniyle.

Bazı şirketlerin her 24 saatte bir yeniden başlatıldığı görülüyor - linux yöneticisi olarak bana garip geliyor. Açıklığa kavuşturmak için: Bunu bir bellek sorunu nedeniyle yapmayı asla tavsiye etmem - sorunu takip edin ve çözün.

Bellek kullanımınız aylarca% 75'te sabit kalırsa, yeniden başlatmaya gerek yoktur - bir sunucu uygulamasının kullanılabilir tüm belleği kullanması tamamen normaldir - performansı artırır, çünkü daha az disk-IO'ya ihtiyacınız vardır verilerinizi önbelleğe almak için RAM.


teşekkürler @ Subito. Aslında, ben bir web dev (bir sunucu yöneticisi değilim) ama şu anda bir sunucu korumak gerekir. Bu yüzden bu basit soruları soruyorum. Bence haklısın. Ama orada böyle şeyler yapan şirketlerin olması beni şaşırttı. Herhangi bir sunucu tarafı nakit parasına fayda sağlamazlar mı?
tugberk

Tüm uygulamaları kendi kendine yazılmıştır ve DOS veya 3.11 ile kullanılmak üzere tasarlanmıştır. Bu uygulamaların ötesinde bir veritabanı almayı başardılar ve bir şekilde bunları Server 2008'e taşıdılar. Bunun hala çalışması bir mucize. Kimse fındıklara sahip olmaz ve önbellek kullanmak için her şeyi değiştirmeye çalışmaz. Onlar orada oturan ve çökmesini ve sonra uygulama / sunucu / ne olursa olsun yeniden başlatmak için bekleyen birkaç kişi var.
Subito

6
Hayır, her 24 saatte bir sunucuyu yeniden başlatmak için "yasal" değil. Ya çok uç nokta sorunları var ya da ağ ve sunucuları mesleğin en büyük salakları tarafından yönetiliyor.
Rob Moir

evet, onlar gerçekten en büyük aptallar - ama bu windows sunucuları ile yapıyor, bildiğim tek şirket değil ... Bellek sorunları ile başa çıkmak için oldukça yaygın bir yol gibi görünüyor. - Beni yanlış anlamayın, sorunları araştırmamak ve çözmek korkunç, korkunç bir hatadır!
Subito

7
@Subito - Cevabınızda "Her 24 saatte bir yeniden başlatmak için yasal görünüyor" dersiniz . OP'ye korkunç bir yazılıma sahip salaklarla dolu olduğunu söylediğiniz bir şirkete atıfta bulunurken bunun meşru bir fikir olduğunu söylüyorsunuz. Bana yasal değil .
MDMarra
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.