Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

ПониманиС ΠΏΡƒΠ»Π° соСдинСний

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡƒΠ» соСдинСний β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния, ΠΊΠΎΠ³Π΄Π° N соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΡƒΠ»Π΅. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ просто Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ соСдинСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ отбрасываСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡƒΠ». Когда ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ доступными для использования Π² ΠΏΡƒΠ»Π΅. ΠŸΡƒΠ» управляСт ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ соСдинСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ фактичСски Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ установлСния соСдинСния ΠΈ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ объСдинСния ΠΏΡƒΠ»Π° избавляСт ΠΎΡ‚ дорогостоящСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ сСтСвоС соСдинСниС Π²ΠΎ врСмя выполнСния прилоТСния ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСанс Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° бэкэндС.

2. РСализация ΠΏΡƒΠ»Π° соСдинСний Π² Tomcat

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ» соСдинСний Apache Commons DBCP β€”

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Tomcat JDBC Connection pool β€”

Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°, Π° Ρ‚ΠΈΠΏ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ javax.sql.DataSource

ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ DBCP Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌ количСством ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ срСд ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ практичСски со всСми Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅.

3. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² объСдинСния

Π’ любом случаС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ JAR-Ρ„Π°ΠΉΠ»Ρ‹ ( commons-dbcp.jar ΠΈΠ»ΠΈ tomcat-jdbc.jar ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΏΡƒΡ‚ΡŒ сборки.

Π’ Π±ΠΎΠ»Π΅Π΅ старых вСрсиях Apache Commons DBCP (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ вСрсии 1.2) Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСприятныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² условиях высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π»ΠΎ Π΅Π³ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ использования, поэтому ΠΏΡƒΠ» соСдинСний JDBC Tomcat Π±Ρ‹Π» пСрСписан.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ PoolConnection

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ»Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Thread Pool. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассматриваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Connection Pool ΠΊ Π‘Π”.

На сСгодняшний дСнь ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ.

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сСрвлСтов Apache Tomcat прСдоставляСт собствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для создания dbcp, основанноС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ apache-commons-dbcp.

apache dbcp ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ имССтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ (Β«ΠΏΡƒΠ»Β») соСдинСний ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Когда Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ доступ ΠΊ Π‘Π”, Π΅ΠΌΡƒ выдаётся ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ соСдинСниС ΠΈΠ· этого ΠΏΡƒΠ»Π°. Если всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ соСдинСния ΡƒΠΆΠ΅ заняты, создаётся Π½ΠΎΠ²ΠΎΠ΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ освобоТдаСт ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… соСдинСний, ΠΎΠ½ΠΎ становится доступно для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Если соСдинСниС Π΄ΠΎΠ»Π³ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΎΠ½ΠΎ закрываСтся.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ нСсколько этапов.

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ рСсурс (Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…) Π² контСкстС прилоТСния. РСсурс описываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для MySQL) :

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ прилоТСния прСдставляСт Ρ„Π°ΠΉΠ» XML. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² %document_root%/META-INF/context.xml, ΠΎΠ΄Π½Π°ΠΊΠΎ это Π½Π΅ СдинствСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. ΠŸΡ€ΠΎ контСкст ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС Tomcat’a: The Context Container.

Π”Π°Π»Π΅Π΅ слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° этот рСсурс Π² дСскрипторС прилоТСния web.xml :

ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (connection pool java) Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Для этого слСдуСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Connection Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ :

Для получСния источника Π΄Π°Π½Π½Ρ‹Ρ… (DataSource) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ JNDI (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь)

ΠŸΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ соСдинСния Π² ΠΏΡƒΠ» всС Statement ΠΈ ResultSet, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого соСдинСния, автоматичСски Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² соотвСтствии с API.

Connection Pool C3P0

ΠŸΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ C3P0 прСдставлСн Ρ„Π°ΠΉΠ»ΠΎΠΌ c3p0-0.9.1.2.jar (вСрсия ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ). АббрСвиатура Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ : Connection Pool 3.0 => Π‘P30 => C3P0.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ настройки JNDI рСсурсов ΡƒΠΆΠ΅ прСдставлСн Π²Ρ‹ΡˆΠ΅. НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ рСсурсы, Π° Π² WEB ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ссылку, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСпосрСдствСнно Π² context.xml. ВсС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ хранятся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ какая конфигурация сСрвСра.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки C3P0 с Π‘Π” MySQL :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого ΡƒΠΌΠ°. Основная Π·Π°Π΄Π°Ρ‡Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² настройкС Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π» ΠΈ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ :

ΠœΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ jdbc Url Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ символ ампСрсанда ‘&’. Если настройка осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· XML-Ρ„Π°ΠΉΠ», Ρ‚ΠΎ Π½Π°Π΄ΠΎ вмСсто param1=value1&param2=value2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ param1=value1&param2=value2.

Π—Π°Π΄Π°Ρ‡Π° создания ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Oracle Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°. ДокумСнтация ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° здСсь

ΠŸΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ java прилоТСния, ComboPooledDataSource

ΠŸΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ C3P0 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Tomcat, Π½ΠΎ ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ самого прилоТСния. Для этого Π½Π΅ трСбуСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… XML Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ дСмонстрируСт процСсс создания ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ :

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ дСмонстрируСт ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Connection ΠΈΠ· ΠΏΡƒΠ»Π°, ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ (Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² ΠΏΡƒΠ»):

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

HikariCP β€” самый быстрый ΠΏΡƒΠ» соСдинСний Π½Π° java

Java Π½Π΅Π΄Π°Π²Π½ΠΎ стукнуло 20 Π»Π΅Ρ‚. Казалось Π±Ρ‹, Π½Π° сСгодняшний дСнь Π½Π° java написано всС. Π›ΡŽΠ±Π°Ρ идСя, любой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, любой инструмСнт Π½Π° java? β€” это ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚Π°ΠΊΠΈΡ… Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‰Π°Ρ… ΠΊΠ°ΠΊ ΠΏΡƒΠ» соСдинСний ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ. Но Π½Π΅ Ρ‚ΡƒΡ‚ Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ! ВстрСчайтС β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ HikariCP β€” самый быстрый Π½Π° сСгодняшний дСнь ΠΏΡƒΠ» соСдинСний Π½Π° java.

HikariCP β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всСгда ΡΡ‚ΠΎΠΈΡ‚ΡŒ Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ сомнСниС ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π΄Π°ΠΆΠ΅ Ссли ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ людСй ΠΈ ΠΆΠΈΠ²ΡƒΡ‚ ΠΎΠ½ΠΈ дСсятки Π»Π΅Ρ‚. Π₯ΠΈΠΊΠ°Ρ€ΠΈ β€” прСкрасный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΈΠΊΡ€ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смогут Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ большС 0.00001% прироста β€” Π² совокупности ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстрый ΠΈ эффСктивный инструмСнт.

Π­Ρ‚ΠΎΡ‚ пост β€” Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ частичный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Down the Rabbit Hole ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° HikariCP ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΌΠΎΠ΅Π³ΠΎ сознания.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Down the Rabbit Hole

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ β€” Ρ€Π΅Ρ†Π΅ΠΏΡ‚ нашСго сСкрСтного соуса. Когда Π’Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ, Ρƒ Вас, ΠΊΠ°ΠΊ Ρƒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ здравая доля скСптицизма. Когда Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΡƒΠ»Π΅ соСдинСний, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ²Π°Ρ€Π½ΠΎΠΉ мысли ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡƒΠ» β€” самая ваТная Π΅Π΅ Ρ‡Π°ΡΡ‚ΡŒ. На самом Π΄Π΅Π»Π΅, это Π½Π΅ совсСм Ρ‚Π°ΠΊ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² getConnection() Π² сравнСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ опСрациями Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ JDBC довольно ΠΌΠ°Π»ΠΎ. ΠžΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ число ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ достигаСтся Π·Π° счСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ€Π°ΠΏΠ΅Ρ€ΠΎΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ Connection, Statement, ΠΈ Ρ‚Π΄.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ HikariCP быстрым (ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ ΠΈ являСтся), Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΊΠΎΠΏΠ½ΡƒΡ‚ΡŒ Π΄ΠΎ уровня Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈ Π½ΠΈΠΆΠ΅. ΠœΡ‹ использовали всС извСстныС Π½Π°ΠΌ Ρ‚Ρ€ΡŽΠΊΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ JIT ΠΏΠΎΠΌΠΎΠ³ Π’Π°ΠΌ. ΠœΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ скомпилированный Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π΄Π°ΠΆΠ΅ измСняли ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΠΌΠΈΡ‚ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π°. ΠœΡ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π»ΠΈ количСство ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ наслСдования, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π»ΠΈ доступ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΡ… видимости ΠΈ удаляли Π»ΡŽΠ±Ρ‹Π΅ привСдСния Ρ‚ΠΈΠΏΠΎΠ².
Иногда, видя Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π»ΠΈΠΌΠΈΡ‚ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π°, ΠΌΡ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ избавится ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Π°ΠΉΡ‚-инструкций. НапримСр:

Достаточно простой ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ ошибка ΠΏΠΎΡ‚Π΅Ρ€ΠΈ соСдинСния. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄:

НавСрноС Π½ΠΈ для ΠΊΠΎΠ³ΠΎ ΡƒΠΆΠ΅ Π½Π΅ сСкрСт, Ρ‡Ρ‚ΠΎ Π»ΠΈΠΌΠΈΡ‚ ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΠ½Π³Π° Π² Hostpot JVM β€” 35 Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ инструкций. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΡƒΠ΄Π΅Π»ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ довольно Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ Π»ΠΈΠΌΠΈΡ‚Ρƒ, Π½ΠΎ всС Π΅Ρ‰Π΅ 36 инструкций. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ сдСлали Ρ‚Π°ΠΊ:

Выглядит ΠΏΡ€ΠΎΡ‰Π΅. НСправда Π»ΠΈ? На самом Π΄Π΅Π»Π΅, этот ΠΊΠΎΠ΄ Ρ…ΡƒΠΆΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ β€” 45 инструкций.
Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС ΡƒΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π˜Π›Π˜ (|). Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ТСртвования тСорСтичСской ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ || Π±ΡƒΠ΄Π΅Ρ‚ быстрСС) Ρ€Π°Π΄ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΈΠ½Π»Π°ΠΉΠ½Π΅Π½). Π‘Π°ΠΉΡ‚ΠΊΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

Как Ρ€Π°Π· Π½ΠΈΠΆΠ΅ Π»ΠΈΠΌΠΈΡ‚Π° Π² 35 Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ инструкций. Π­Ρ‚ΠΎ малСнький ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅ высоконагруТСнный, Π½ΠΎ идСю Π’Ρ‹ поняли. НСбольшиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ JITΡƒ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΊΠΎΠ΄, ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ мСньшС фактичСских ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ помСстится Π² L1 кэшС процСссора. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΌΠ½ΠΎΠΆΡŒΡ‚Π΅ всС это Π½Π° количСство Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ Π’Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Π΅ΠΌΡƒ HickaryCP Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстр.

ΠœΠΈΠΊΡ€ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’ HikariCP ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠΊΡ€ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ. По ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹. Но всС вмСстС сильно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. НСкоторыС ΠΈΠ· этих ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ β€” это Π΄ΠΎΠ»ΠΈ микросСкунды для ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

ArrayList

Одной ΠΈΠ· самых Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ArrayList Π² классС ConnectionProxy, которая использовалась для отслСТивания ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Statement. Когда Statement закрываСтся, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅, Π² случаС Ссли закрываСтся соСдинСниС β€” Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ любой ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Statement ΠΈ ΡƒΠΆΠ΅ послС β€” ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. Как извСстно ArrayList осущСствляСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² индСкса Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² get(index). Но, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ индСкса β€” эта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° излишня. Π’Π°ΠΊΠΆΠ΅, рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° remove(Object) осущСствляСт ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° списка. Π’ Ρ‚ΠΎΠΆΠ΅ врСмя общСпринятый ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π² JDBC β€” ΠΈΠ»ΠΈ сразу Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Statements послС использования ΠΈΠ»ΠΈ ΠΆΠ΅ Π² порядкС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ (FILO). Для Ρ‚Π°ΠΊΠΈΡ… случаСв, ΠΏΡ€ΠΎΡ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ начинаСтся с ΠΊΠΎΠ½Ρ†Π° списка β€” Π±ΡƒΠ΄Π΅Ρ‚ быстрСС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ArrayList Π½Π° FastStatementList Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· списка начинаСтся с ΠΊΠΎΠ½Ρ†Π°.

ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ синглтон

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прокси для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Connection, Statement, ResultSet HikariCP ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ использовал Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ синглтонов. Π’ случаС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ConnectionProxy эта Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π² статичСском ΠΏΠΎΠ»Π΅ PROXY_FACTORY. И Π² ΠΊΠΎΠ΄Π΅ Π±Ρ‹Π»ΠΎ нСсколько дСсятков мСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°Π»ΠΈΡΡŒ Π½Π° это ΠΏΠΎΠ»Π΅.

Π’ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π΅ это выглядСло Ρ‚Π°ΠΊ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈΠ΄Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² getstatic, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ статичСского поля PROXY_FACTORY. Π’Π°ΠΊ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° послСдний Π²Ρ‹Π·ΠΎΠ² invokevirtual для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getProxyPreparedStatement() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ProxyFactory.
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ синглтонов ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΅Π΅ классом со статичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Код стал Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π“Π΄Π΅ getProxyPreparedStatement() β€” статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ класса ProxyFactory. А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄:

Π—Π΄Π΅ΡΡŒ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ сразу Π½Π° 3 ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. Π’Ρ‹Π·ΠΎΠ²Π° getstatic большС Π½Π΅Ρ‚Ρƒ. invokevirtual Π±Ρ‹Π» Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° invokestatic, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ оптимизируСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной. И послСдний ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ с 5-Ρ‚ΠΈ элСмСнтов Π΄ΠΎ 4-Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² случаС с invokevirtual Π½Π° стСк Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ссылка Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ProxyFactory. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ pop ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для получСния этой ссылки ΠΈΠ· стСка Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° getProxyPreparedStatement(). Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ссли ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΌΡ‹ избавились ΠΎΡ‚ доступа ΠΊ статичСскому полю, ΡƒΠ±Ρ€Π°Π»ΠΈ лишниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ push ΠΈ pop Π½Π° стСкС ΠΈ сдСлали Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JIT.

UPDATE:
Π’ коммСнтариях Ρ‡Π°ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ синглтон» Π²Ρ‹Π·Π²Π°Π»Π° ΠΌΠ½ΠΎΠ³ΠΎ обсуТдСний. apangin ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС эти ΠΌΠΈΠΊΡ€ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ бСссмыслСнны ΠΈ Π½Π΅ Π΄Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ прироста. Π’ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ приводится простой Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ стоимости invokeVirtual ΠΈ invokeStatic. А Ρ‚ΡƒΡ‚ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ ΠΏΡƒΠ»Π° соСдинСний одноклассников, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ якобы Π² 4 Ρ€Π°Π·Π° быстрСС HickaryCP. На Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ HickaryCP Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚:

First I would like to comment on @odnoklassniki comment that their pool is 4x faster. I have added their pool to the JMH benchmark and committed the changes for anyone to run. Here is the result vs. HikariCP:

This is showing HikariCP at 8x faster than one-datasource.

Keep in mind that not only has HikariCP changed since that wiki page was written, but the JMH test harness itself has changed. In order to recreate the results I got at that time, I checked out HikariCP source with that specific commit, and checked out the source just before that commit. I ran both using the benchmark harness available at that time:

Before static proxy factory methods:

After static proxy factory methods:

It shows a minor improvement after the change that is above the mean error.

Typically, every change is checked with the benchmark before being committed, so it is doubtful that we would have committed that change unless the benchmark showed improvement.

EDIT: And wow has HikariCP performance improved since January 2014!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Connection pool Π±Π΅Π· DataSource Π² Java

Ни для ΠΊΠΎΠ³ΠΎ Π½Π΅ сСкрСт, Ρ‡Ρ‚ΠΎ Π² Java EE Connection Pool рСализуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Data Source. Π‘ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Apache Tomcat ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΏΠΎ этой ссылкС: habrahabr.ru/post/101342. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Java SE ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ доступ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ схСмС Connection Pool. Π’Π΅Π΄ΡŒ сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρƒ нас Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅Ρ‚, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Data Source ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Π° для создания соСдинСний ΠΊ Π±Π΄ Π½Π°ΠΌ придСтся скорСС всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ java.sql.DriverManager. МоТно Π΅Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π·Π°ΠΌΠ΅Π½Ρƒ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ: docs.oracle.com/javase/jndi/tutorial/ldap/connect/pool.html. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡƒΠΆΠ΅ рСализовывался Π½Π° Java, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ я Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² сСти. И я Ρ€Π΅ΡˆΠΈΠ» изобрСсти свой вСлосипСд. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π² поисковикС ΠΏΡ€ΠΈ поискС Connection pool Π² Java Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠ»Π° ссылка Π½Π° эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠΎ коммСнтариям ΠΈ дополнСниям ΠΎΡ‚ habr.ru, ΠΈ эта ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ. Если стало интСрСсно, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ всС Π² Π²ΠΈΠ΄Π΅ класса, конструктор ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ количСство соСдинСний Π² ΠΏΡƒΠ»Π΅ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π΄ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ класса ΠΈΠ· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ строка ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ вмСстС с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ). НазовСм класс ConnectionPool, Π΅Π³ΠΎ конструктор Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

url β€” это строка ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, для MS SQL Server ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅: jdbc:sqlserver://192.168.0.1;databaseName=dbname;username=username;password=pwd. МоТно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² DriverManager. Π—Π΄Π΅ΡΡŒ всС Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΌΠ½Π΅ Ρ‚Π°ΠΊ показалось ΡƒΠ΄ΠΎΠ±Π½Π΅ΠΉ. Один ΠΈΠ· допустимых Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с MS SQL Server ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: com.microsoft.sqlserver.jdbc.SQLServerDriver.
Π’ Π΄Π°Π½Π½ΠΎΠΌ классС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π°:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ список доступных для использования соСдинСний, Π²Ρ‚ΠΎΡ€ΠΎΠΉ список ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
ΠšΡ€ΠΎΠΌΠ΅ этого опрСдСляСтся пСрСмСнная url, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ строку ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π΄:

Π’ конструкторС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция getConnection, которая просто создаСт Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π•Π³ΠΎ рСализация ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ availableConns, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Connection’Π°ΠΌΠΈ Π² количСствС initConnCnt ΡˆΡ‚ΡƒΠΊ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСпосрСдствСнно ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚.Π΅. для доступа ΠΊ Π±Π΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ retrieve, эта функция Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ· availableConns ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Connection ΠΈ добавляСт Π΅Π³ΠΎ Π² usedConns, Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ это соСдинСниС, Ρ‚Π΅ΠΌ самым ΠΎΠ½ становится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ:

Π›ΠΎΠ³ΠΈΠΊΠ° понятна: сначала ΠΌΡ‹ провСряСм, Π΅ΡΡ‚ΡŒ Π»ΠΈ свободныС соСдинСния, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΌΡ‹ создаСм Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ послСдний элСмСнт ΠΈΠ· availableConns ΠΈ удаляСм Π΅Π³ΠΎ ΠΈΠ· Π²Π΅ΠΊΡ‚ΠΎΡ€Π° свободных соСдинСний. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданноС соСдинСниС ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΈΠ· списка свободных добавляСм Π² список ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… строкой
ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ это соСдинСниС. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π±Π΅Π· synchronized Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. Как ΠΆΠ΅ ΠΈΠ½Π°Ρ‡Π΅? Доступ Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ, Π²Π΄Ρ€ΡƒΠ³ Π΄Π²ΡƒΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ выдСлится ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ соСдинСниС! Когда соСдинСниС становится Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΌΡ‹ выполняСм ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈΠ½Π°Ρ‡Π΅ говоря putback:

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ‚ΠΎΠΆΠ΅ понятна ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ объянСний.
Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ нСобходимости Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΡƒΡ‡Ρƒ всяких Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ доступ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функция для получСния количСства свободных соСдинСний Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ вСсь класс:

upd. ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» putback согласно ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡŽ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РусскиС Π‘Π»ΠΎΠ³ΠΈ

Π’Π²ΠΎΠ΄Π½ΠΎΠ΅ руководство ADO.NET (ΠΏΡΡ‚ΡŒ) ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡƒΠ» соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…

ΠžΡ‚ΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΠ΅

Π˜Π·ΡƒΡ‡ΠΈΠ² нСсколько ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π³Π»Π°Π², ΠΌΠ½Π΅ интСрСсно, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ вас ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ADO.NET. НСзависимо ΠΎΡ‚ качСства ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я ΠΏΠΈΡˆΡƒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎΡ‚ Π΄ΡƒΡˆΠΈ. Π― ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡƒΠΌΠ°Π» ΠΊΠ°ΠΊ Π½Π°Π΄ ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π½Π°Π΄ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Π― надСюсь, Ρ‡Ρ‚ΠΎ благодаря этой сСрии статСй, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π²Π΅Ρ‚Π΅Ρ€Π°Π½ΠΎΠΌ, Π²Ρ‹ смоТСтС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ приобрСсти Π² ADO.NET.Если Π²Ρ‹ сочтСтС это ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, я надСюсь ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ваши Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΈ Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚Π΅ мСня. Если всС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ я ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΈΡˆΡƒ, я Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π΄ Π²Ρ‹ΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒ ΠΈ позволяю Π½Π°ΠΌ вмСстС Π΄ΠΎΠ±ΠΈΠ²Π°Ρ‚ΡŒΡΡ прогрСсса.

РСзюмС

ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний?

ЀактичСски, ADO.NET ΡƒΠΆΠ΅ прСдоставил Π½Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡƒΠ»ΠΎΠΌ соСдинСний.ΠŸΡƒΠ» соСдинСний являСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ: ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство физичСских ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ сСрвСру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ сСрвСру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ соСдинСниС ΠΈΠ· ΠΏΡƒΠ»Π° (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°) вмСсто создания Π½ΠΎΠ²ΠΎΠ³ΠΎ соСдинСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π΅ΠΌ самым ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния.

PS:Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я сдСлал Π΄Π²Π΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ для описания ΠΏΡƒΠ»Π° соСдинСний, Π½ΠΎ компания установила ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ, поэтому ΠΌΠ½Π΅ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ мСня Π±ΡƒΠ΄Π΅Ρ‚ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·.

2. Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

2.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ

Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ записано,ΠŸΡƒΠ» соСдинСний различаСтся ΠΏΠΎ катСгориям.Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΡƒΠ»Ρ‹ соСдинСний? Π’ дСталях, ΠΎΠ½ отличаСтся подписью процСсса, Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ прилоТСния, строкой ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Windows (ΠΏΡ€ΠΈ использовании ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ бСзопасности). Но для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π΄ΠΎΠΌΠ΅Π½Π° прилоТСния ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ различаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строкой ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Если ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ соСдинСния подпись Ρ‚ΠΈΠΏΠ° соСдинСния Π½Π΅ соотвСтствуСт Ρ‚ΠΈΠΏΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡƒΠ»Π° соСдинСний, создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΠ» соСдинСний. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΠ» соСдинСний Π½Π΅ создаСтся.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я создал Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° SqlConnection, Π½ΠΎ для управлСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΏΡƒΠ»Π° соСдинСний. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ conn1 ΠΈ conn3 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡƒΠ» соСдинСний, Π° conn2 отличаСтся ΠΎΡ‚ conn1 ΠΈ conn3, поэтому Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΠ» соСдинСний.

2.2 РаспрСдСлСниС нСзанятых соСдинСний

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ создаСт запрос Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Open of the Connection,ДиспСтчСр ΠΏΡƒΠ»Π° соСдинСний сначала Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΠ» соСдинСний ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π² соотвСтствии с сигнатурой Ρ‚ΠΈΠΏΠ° запроса Π½Π° соСдинСниС, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСзанятоС соСдинСниС.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

2.3 Π£Π΄Π°Π»ΠΈΡ‚ΡŒ нСдопустимоС соСдинСниС

ΠΠ΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ соСдинСниС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ соСдинСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΊ сСрвСру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΏΡƒΠ»Π° соСдинСний количСство сохранСнных соСдинСний с сСрвСром Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для нСдопустимых соСдинСний, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ воврСмя, пространство Π² ΠΏΡƒΠ»Π΅ соСдинСний Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. На самом Π΄Π΅Π»Π΅, Π²Π°ΠΌ Π½Π΅ ΠΎ Ρ‡Π΅ΠΌ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΡƒΠ»Π° соСдинСний ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ справился с этими ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Если соСдинСниС простаиваСт Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ обнаруТиваСтся, Ρ‡Ρ‚ΠΎ соСдинСниС с сСрвСром Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, диспСтчСр ΠΏΡƒΠ»Π° соСдинСний ΡƒΠ΄Π°Π»ΠΈΡ‚ соСдинСниС ΠΈΠ· ΠΏΡƒΠ»Π°.

2.4 Утилизация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… соСдинСний

Когда ΠΌΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ соСдинСниС, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΎΡ€Π²Π°Ρ‚ΡŒ соСдинСниС воврСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ соСдинСниС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² ΠΏΡƒΠ» для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Close ΠΈΠ»ΠΈ Dispose ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Connection ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° using Π² C #.

3. РасскаТитС ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ….

ПовСдСниС ΠΏΡƒΠ»Π° соСдинСний ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ строки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π’ основном Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°:

Или посмотритС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ свойства ΠΏΡƒΠ»Π° соСдинСний. ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

4. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° соСдинСний ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС, Π½ΠΎ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ воврСмя, часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Β«ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ соСдинСния». Π£Ρ‚Π΅Ρ‡ΠΊΠ° соСдинСния останСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Dispose, Π° сборщик мусора (GC) Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ ΠΈ освободит соСдинСниС. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ADO, ADO.NET Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ соСдинСниС.Π’Π°ΠΆΠ½ΠΎΠ΅ Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ локальной области, соСдинСниС закрываСтся.ЀактичСски, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ,ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ рСсурс ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.Π§Ρ‚ΠΎ ΠΆ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сначала рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, я установил максимальноС количСство ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π° 5 ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ оТидания Π½Π° 1 сСкунду. ПослС Π±Π΅Π³Π° быстро Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΌΡ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ соСдинСниС Π½Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅. ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ максимальноС количСство ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡƒΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π²Π½ΠΎ 5. Когда создаСтся ΡˆΠ΅ΡΡ‚ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ количСство ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡƒΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ достигло максимального числа ΠΈ Π½Π΅Ρ‚ нСзанятых ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ соСдинСниС Π΄ΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°. Когда ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ соСдинСния. ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ,Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ соСдинСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ скорСС Ρ€Π°Π·ΠΎΡ€Π²Π°Π½ΠΎ.

5. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° состояния ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ SQL Server.

(1) Π§Π΅Ρ€Π΅Π· ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ активности

ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг:ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ MSSMS Manager, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ «ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ активности«ΠΈΠΊΠΎΠ½Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Π’Ρ‚ΠΎΡ€ΠΎΠΉ шаг:Π’ прСдставлСнии Β«ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ активности» Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ «ΠΏΡ€ΠΎΡ†Π΅ΡΡ«Π’Π°Π±.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ шаг:Π‘Π΅ΠΆΠ°Ρ‚ΡŒ# 4 Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° соСдинСний ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ 5 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… соСдинСний, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π½ΠΈΠΆΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

(2) Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ T-SQL

Аналогично, выполняя систСмныС Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹sp_who, ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ статус ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

МоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΠ» соСдинСний

6. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ эффСктивного использования ΠΏΡƒΠ»Π° соСдинСний.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΏΡƒΠ»Π° соСдинСний Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния. Напротив, ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Ρ€Π΅Π΄Π°, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, слСдуСт ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *