Connection Pool
Thread Pool์ ์ด์ด์ง๋ ๊ธ์ด๋ค.
Source code
https://github.com/teamsmiley/gitbook-sample/tree/main/ThreadTest
entity framework sample code
๋๋ mysql๋ก ์ฒ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค. test๋๋น๋ฅผ ๋ง๋ค๊ณ blogํ
์ด๋ธ์ ๋ง๋ค์๋ค ํญ๋ชฉ์ url
์ด ํ๋ ์๋ค.
dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.0.2
vi ValuesController.cs
using var connection = new MySqlConnection("server=192.168.1.21;User ID=root;Password=root;database=test;");
connection.Open();
using var command = connection.CreateCommand();
command.CommandText = "DO SLEEP(10);SELECT Url FROM Blogs;";
using var reader = command.ExecuteReader();
while (reader.Read())
{
var url = reader.GetString(0);
System.Console.WriteLine($"blog url {url}");
}
// Thread.Sleep(1000000); // Sleep for 10 seconds
Console.WriteLine("Thread completed. go back to the pool.");
์ฝ๋๋ฅผ ์คํํ๊ณ locust๋ฅผ ์คํํ์๋ง์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.

que๊ฐ ๊ณ์ ์ฌ๋ผ๊ฐ๋ค.
๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก dbcontext๋ connection pool์ ์ฌ์ฉํ์ง ์๋๋ค.

AddDbContextPool๋ฅผ ์ฌ์ฉํด์ผํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก connection pool์ 1024๊ฐ์ ํ์ ๋ง๋ ๋ค. ์ด๊ฒ์ ์ค์ ์ ํตํด์ ๋ณ๊ฒฝํ ์ ์๋ค.
ํ ์คํธ ๊ฒฐ๊ณผ mysql์ max_connection ๊ฐฏ์๋ณด๋ค ๋ง์ผ๋ฉด thread๊ฐ ์ฃฝ๋๊ฒ์ ์์์๋ค
SHOW VARIABLES LIKE '%connect%';SHOW STATUS LIKE 'Threads_connected';

102๊ฐ ์ด์์ ์ปค๋ฅ์ ์ ์๋ฐ๋๊ฑธ ์์ ์๋ค.
api๋ error๋ฅผ ๋ณด๋ธ๋ค.

api๋ฅผ ๋ฉ์ถ์.
๊ทธ๋ฌ๋ ํ์ฌ ์ฐ๊ฒฐ๋ ๊ฐฏ์๋ ์ค์ด๋ค์ง ์๋๋ค.

์ด๊ฒ์ mysql์ wait_timeout์ด 8์๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. 8์๊ฐ์ด ์ง๋๋ฉด ์ค์ด๋ค๋ ค๋.
๊ฒฐ๊ณผ์ ์ผ๋ก connect์ ๊ณ์ ๋๋ฆฌ๋ฉด ๋ฌธ์ ๊ฐ ๋๋ค. ๋๋น๋ฅผ ์ฌ์์ํด์ผํ๋๊ฒฝ์ฐ๊น์ง ์๊ธธ์ ์๋ค.
์ฝ๋๋ฅผ ์์ ํด๋ณด์.
// command.CommandText = "DO SLEEP(1000);SELECT Url FROM Blogs;";
command.CommandText = "SELECT Url FROM Blogs;";
๋ฌธ์ ์์ด ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ณ connect๋ ๋ง์ด ์ถ๊ฐ๋์ง ์๋๋ค
๊ฒฐ๋ก ์ ์ฟผ๋ฆฌ๊ฐ ๋๋๋ฉด ์ปค๋ฅ์ ์ด ์๋์ผ๋ก ๋์ด์ง๋๊ฑธ ์์์๋ค.
์ปค๋ฅ์ ํ์ ์ฌ์ฉํ๋ฉด ์ปค๋ฅ์ ์ ์ฌ์ฌ์ฉํ ์ ์๊ณ ์ปค๋ฅ์ ์ ๋ ๋นจ๋ฆฌ ์ป์์ ์๋ค.
ํผํฌ๋จผ์ค

๋๋ฐฐ ์ด์์ ์ปค๋ฅ์ ๋งบ๋ ์๋ ํฅ์์ ์ป์์ ์๋ค.
todo
๋ค์์ redis๋ฅผ ํด๋ณด์.
Last updated
Was this helpful?