MySQL için Azure Veritabanı'yla ilgili geçici hataları işleme ve veritabanına verimli bir şekilde bağlanma
ŞUNLAR IÇIN GEÇERLIDIR: MySQL için Azure Veritabanı - Tek Sunucu
Önemli
MySQL için Azure Veritabanı tek sunucu kullanımdan kaldırma yolundadır. Esnek MySQL için Azure Veritabanı sunucuya yükseltmenizi kesinlikle öneririz. MySQL için Azure Veritabanı esnek sunucuya geçiş hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı Tek Sunucu'ya neler oluyor?
Bu makalede, geçici hataları işleme ve MySQL için Azure Veritabanı verimli bir şekilde bağlanma açıklanmaktadır.
Geçici hatalar
Geçici hata olarak da bilinen geçici hata, kendisini çözecek bir hatadır. Bu hataların çoğu genellikle bırakılan veritabanı sunucusuna bağlantı olarak bildiriliyor. Ayrıca bir sunucuya yeni bağlantılar açılamaz. Geçici hatalar, örneğin donanım veya ağ hatası oluştuğunda oluşabilir. Bir diğer neden de piyasaya sürülen PaaS hizmetinin yeni bir sürümü olabilir. Bu olayların çoğu sistem tarafından 60 saniyeden kısa sürede otomatik olarak azaltılır. Bulutta uygulama tasarlamak ve geliştirmek için en iyi yöntem geçici hatalar beklemektir. Bunların herhangi bir bileşende herhangi bir zamanda gerçekleşebileceğini ve bu durumlarla başa çıkabilmek için uygun mantığın uygun olduğunu varsayalım.
Geçici hataları işleme
Geçici hatalar yeniden deneme mantığı kullanılarak işlenmelidir. Dikkate alınması gereken durumlar:
- Bağlantı açmaya çalıştığınızda bir hata oluşur
- Boşta bağlantı sunucu tarafına bırakılır. Bir komut vermeye çalıştığınızda yürütülemez
- Şu anda bir komut yürüten etkin bir bağlantı bırakılır.
Birinci ve ikinci büyük/küçük harfle ilgilenmek oldukça kolaydır. Bağlantıyı yeniden açmayı deneyin. Başarılı olduğunuzda geçici hata sistem tarafından giderilmiştir. MySQL için Azure Veritabanı yeniden kullanabilirsiniz. Bağlantıyı yeniden denemeden önce beklemeniz önerilir. İlk yeniden denemeler başarısız olursa geri dönün. Bu şekilde sistem, hata durumunun üstesinden gelmek için kullanılabilir tüm kaynakları kullanabilir. İzlenmek için iyi bir desen:
- İlk yeniden denemenizden önce 5 saniye bekleyin.
- Aşağıdaki her yeniden deneme için beklemeyi üstel olarak 60 saniyeye kadar artırın.
- Uygulamanızın işlemin başarısız olduğunu düşündüğü en fazla yeniden deneme sayısını ayarlayın.
Etkin bir işlemle bağlantı başarısız olduğunda kurtarmayı doğru şekilde işlemek daha zordur. İki durum vardır: İşlem salt okunur durumdaysa, bağlantıyı yeniden açmak ve işlemi yeniden denemek güvenlidir. Ancak işlem veritabanına da yazıyorsa, işlemin geri alınıp alınmadığını veya geçici hata gerçekleşmeden önce başarılı olup olmadığını belirlemeniz gerekir. Bu durumda, veritabanı sunucusundan işleme onayını almamış olabilirsiniz.
Bunu yapmanın bir yolu, istemcide tüm yeniden denemeler için kullanılan benzersiz bir kimlik oluşturmaktır. Bu benzersiz kimliği işlemin bir parçası olarak sunucuya geçirir ve benzersiz bir kısıtlamaya sahip bir sütunda depolarsınız. Bu şekilde işlemi güvenli bir şekilde yeniden deneyebilirsiniz. Önceki işlem geri alınırsa ve istemci tarafından oluşturulan benzersiz kimlik sistemde henüz yoksa başarılı olur. Önceki işlem başarıyla tamamlandığından, benzersiz kimlik daha önce depolandıysa yinelenen anahtar ihlalini gösteren başarısız olur.
Programınız üçüncü taraf ara yazılım aracılığıyla MySQL için Azure Veritabanı ile iletişim kurarken, satıcıya geçici hatalar için ara yazılımın yeniden deneme mantığı içerip içermediğini sorun.
Yeniden deneme mantığınızı test ettiğinizden emin olun. Örneğin, MySQL için Azure Veritabanı sunucunuzun işlem kaynaklarının ölçeğini artırıp daraltırken kodunuzu yürütmeyi deneyin. Uygulamanız bu işlem sırasında karşılaşılan kısa kapalı kalma süresini sorunsuz bir şekilde işlemelidir.
MySQL için Azure Veritabanı verimli bir şekilde bağlanın
Veritabanı bağlantıları sınırlı bir kaynaktır, bu nedenle erişim MySQL için Azure Veritabanı erişmek için bağlantı havuzu kullanımının etkili bir şekilde kullanılması performansı iyileştirir. Aşağıdaki bölümde, MySQL için Azure Veritabanı daha etkili bir şekilde erişmek için bağlantı havuzunun veya kalıcı bağlantıların nasıl kullanılacağı açıklanmaktadır.
Bağlantı havuzu kullanarak veritabanlarına erişme (önerilen)
Veritabanı bağlantılarının yönetilmesi, uygulamanın bir bütün olarak performansı üzerinde önemli bir etkiye sahip olabilir. Uygulamanızın performansını iyileştirmek için amaç, bağlantıların kurulma sayısını ve anahtar kod yollarında bağlantı kurma süresini azaltmak olmalıdır. MySQL için Azure Veritabanı bağlanmak için veritabanı bağlantı havuzunu veya kalıcı bağlantıları kullanmanızı kesinlikle öneririz. Veritabanı bağlantı havuzu, veritabanı bağlantılarının oluşturulmasını, yönetilmesini ve ayrılmasını işler. Bir program veritabanı bağlantısı istediğinde, yeni bir bağlantı oluşturmak yerine var olan boşta veritabanı bağlantılarını ayırmaya öncelik sağlar. Program veritabanı bağlantısını kullanmayı bitirdikten sonra, bağlantı yalnızca kapatılmak yerine daha fazla kullanım için hazırlanırken kurtarılır.
Daha iyi bir çizim için, bu makalede örnek olarak JAVA kullanan bir örnek kod parçası sağlanır. Daha fazla bilgi için bkz . Apache common DBCP.
Not
Sunucu, kaynakları boşaltmak için bir süredir boşta durumda olan bir bağlantıyı kapatmak için bir zaman aşımı mekanizması yapılandırır. Kalıcı bağlantıları kullanırken etkili olduğundan emin olmak için doğrulama sistemini ayarladığınızdan emin olun. Daha fazla bilgi için bkz . Kalıcı bağlantıların etkili olduğundan emin olmak için istemci tarafında doğrulama sistemlerini yapılandırma.
Kalıcı bağlantılar kullanarak veritabanlarına erişme (önerilir)
Kalıcı bağlantılar kavramı, bağlantı havuzuna benzer. Kısa bağlantıları kalıcı bağlantılarla değiştirmek için kodda yalnızca küçük değişiklikler yapılması gerekir, ancak bunun birçok tipik uygulama senaryosunda performansı artırma açısından önemli bir etkisi vardır.
Kısa bağlantılarla bekleme ve yeniden deneme mekanizmasını kullanarak veritabanlarına erişme
Kaynak sınırlamalarınız varsa veritabanlarına erişmek için veritabanı havuzu veya kalıcı bağlantılar kullanmanızı kesinlikle öneririz. Uygulamanız kısa bağlantılar kullanıyorsa ve eşzamanlı bağlantı sayısı konusunda üst sınıra yaklaştığınızda bağlantı hataları yaşıyorsa beklemeyi ve yeniden deneme mekanizmasını deneyebilirsiniz. İlk denemeden sonra daha kısa bir bekleme süresiyle uygun bir bekleme süresi ayarlayabilirsiniz. Bundan sonra, olayları birden çok kez beklemeyi deneyebilirsiniz.
İstemcilerdeki doğrulama mekanizmalarını, kalıcı bağlantıların etkinliğini onaylamak için yapılandırma
Sunucu, kaynakları boşaltmak için bir süredir boşta durumda olan bir bağlantıyı kapatmak için bir zaman aşımı mekanizması yapılandırır. İstemci veritabanına yeniden eriştiğinde, istemci ile sunucu arasında yeni bir bağlantı isteği oluşturmakla eşdeğerdir. Bunları kullanma işlemi sırasında bağlantıların etkili olmasını sağlamak için istemcide bir doğrulama mekanizması yapılandırın. Aşağıdaki örnekte gösterildiği gibi, bu doğrulama mekanizmasını yapılandırmak için Tomcat JDBC bağlantı havuzunu kullanabilirsiniz.
TestOnBorrow parametresini ayarlayarak, yeni bir istek olduğunda bağlantı havuzu tüm kullanılabilir boşta bağlantıların etkinliğini otomatik olarak doğrular. Böyle bir bağlantı etkiliyse, doğrudan döndürülürse bağlantı havuzu bağlantıyı geri çeker. Bağlantı havuzu daha sonra yeni bir etkin bağlantı oluşturur ve bunu döndürür. Bu işlem, veritabanına verimli bir şekilde erişilmesini sağlar.
Belirli ayarlar hakkında bilgi için JDBC bağlantı havuzu resmi giriş belgesine bakın. Temel olarak şu üç parametreyi ayarlamanız gerekir: TestOnBorrow (true olarak ayarlanır), ValidationQuery (SELECT 1 olarak ayarlanır) ve ValidationQueryTimeout (1 olarak ayarlanır). Belirli örnek kod aşağıda gösterilmiştir:
public class SimpleTestOnBorrowExample {
public static void main(String[] args) throws Exception {
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/mysql");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("password");
// The indication of whether objects will be validated by the idle object evictor (if any).
// If an object fails to validate, it will be dropped from the pool.
// NOTE - for a true value to have any effect, the validationQuery or validatorClassName parameter must be set to a non-null string.
p.setTestOnBorrow(true);
// The SQL query that will be used to validate connections from this pool before returning them to the caller.
// If specified, this query does not have to return any data, it just can't throw a SQLException.
p.setValidationQuery("SELECT 1");
// The timeout in seconds before a connection validation queries fail.
// This works by calling java.sql.Statement.setQueryTimeout(seconds) on the statement that executes the validationQuery.
// The pool itself doesn't timeout the query, it is still up to the JDBC driver to enforce query timeouts.
// A value less than or equal to zero will disable this feature.
p.setValidationQueryTimeout(1);
// set other useful pool properties.
DataSource datasource = new DataSource();
datasource.setPoolProperties(p);
Connection con = null;
try {
con = datasource.getConnection();
// execute your query here
} finally {
if (con!=null) try {con.close();}catch (Exception ignore) {}
}
}
}