{"id":4136,"date":"2020-02-20T15:58:40","date_gmt":"2020-02-20T08:58:40","guid":{"rendered":"https:\/\/tino.vn\/?post_type=ht_kb&#038;p=4136"},"modified":"2020-02-20T15:58:40","modified_gmt":"2020-02-20T08:58:40","slug":"mariadb-advance-thread-pool","status":"publish","type":"ht_kb","link":"https:\/\/tino.vn\/blog\/docs\/mariadb-advance-thread-pool\/","title":{"rendered":"MariaDB Advance: thread pool"},"content":{"rendered":"<h2 id=\"Thread_Pools_c\u00f3_th\u1ec3_l\u00e0m_g\u00ec?\">Thread Pools c\u00f3 th\u1ec3 l\u00e0m g\u00ec?<\/h2>\n<p>Theo truy\u1ec1n th\u1ed1ng, MySQL \u0111\u00e3 g\u00e1n m\u1ed9t Thread cho m\u1ecdi k\u1ebft n\u1ed1i client v\u00e0 khi s\u1ed1 l\u01b0\u1ee3ng user \u0111\u1ed3ng th\u1eddi t\u0103ng l\u00ean, m\u00f4 h\u00ecnh n\u00e0y cho th\u1ea5y hi\u1ec7u su\u1ea5t gi\u1ea3m. Nhi\u1ec1u lu\u1ed3ng ho\u1ea1t \u0111\u1ed9ng s\u1ebd gi\u1ebft hi\u1ec7u n\u0103ng, b\u1edfi v\u00ec vi\u1ec7c t\u0103ng s\u1ed1 l\u01b0\u1ee3ng Thread d\u1eabn \u0111\u1ebfn chuy\u1ec3n \u0111\u1ed5i ng\u1eef c\u1ea3nh x\u1ea5u cho b\u1ed9 nh\u1edb CPU v\u00e0 t\u0103ng s\u1ef1 tranh ch\u1ea5p \u0111\u1ed1i v\u1edbi c\u00e1c kh\u00f3a n\u00f3ng. M\u1ed9t gi\u1ea3i ph\u00e1p l\u00fd t\u01b0\u1edfng s\u1ebd gi\u00fap gi\u1ea3m chuy\u1ec3n \u0111\u1ed5i ng\u1eef c\u1ea3nh l\u00e0 duy tr\u00ec s\u1ed1 l\u01b0\u1ee3ng Thread th\u1ea5p h\u01a1n s\u1ed1 l\u01b0\u1ee3ng user. Nh\u01b0ng con s\u1ed1 n\u00e0y c\u0169ng kh\u00f4ng n\u00ean qu\u00e1 th\u1ea5p, v\u00ec ch\u00fang ta c\u0169ng mu\u1ed1n s\u1eed d\u1ee5ng CPU h\u1ebft m\u1ee9c, v\u00ec v\u1eady l\u00fd t\u01b0\u1edfng nh\u1ea5t l\u00e0 ph\u1ea3i c\u00f3 m\u1ed9t Thread ho\u1ea1t \u0111\u1ed9ng duy nh\u1ea5t cho m\u1ed7i CPU tr\u00ean m\u00e1y.<\/p>\n<h2 id=\"C\u00e1c_t\u00ednh_n\u0103ng_c\u1ee7a_MariaDB_Thread_Pool\">C\u00e1c t\u00ednh n\u0103ng c\u1ee7a MariaDB Thread Pool<\/h2>\n<p>B\u1eaft \u0111\u1ea7u t\u1eeb\u00a0 <a href=\"https:\/\/mariadb.com\/kb\/en\/what-is-mariadb-55\/\" rel=\"nofollow noopener\" target=\"_blank\">MariaDB 5.5<\/a> tri\u1ec3n khai m\u1ed9t nh\u00f3m dynamic\/adaptive pool, t\u1ef1 n\u00f3 s\u1ebd \u0111\u1ea3m nhi\u1ec7m vi\u1ec7c t\u1ea1o ra c\u00e1c Thread m\u1edbi trong th\u1eddi \u0111i\u1ec3m c\u00f3 nhu c\u1ea7u cao v\u00e0 gi\u1ea3m b\u1edbt Thread khi kh\u00f4ng c\u00f3 nhu c\u1ea7u ho\u1ea1t \u0111\u1ed9ng.<\/p>\n<div class=\"ddict_div\">\n<p class=\"ddict_sentence\">\u0110\u00e2y l\u00e0 c\u00e1ch ho\u1ea1t \u0111\u1ed9ng k\u1ebft th\u1eeba t\u1eeb th\u00f4ng s\u1ed1 pool-of-threads, v\u1edbi c\u00e1c m\u1ee5c ti\u00eau sau:<\/p>\n<\/div>\n<ul>\n<li>L\u00e0m cho pool c\u00f3 th\u1ec3 linh \u0111\u1ed9ng, \u0111\u1ec3 n\u00f3 s\u1ebd ph\u00e1t tri\u1ec3n v\u00e0 co l\u1ea1i b\u1ea5t c\u1ee9 khi n\u00e0o c\u1ea7n thi\u1ebft.<\/li>\n<li>Gi\u1ea3m thi\u1ec3u l\u01b0\u1ee3ng chi ph\u00ed c\u1ea7n thi\u1ebft \u0111\u1ec3 duy tr\u00ec Thread Pool.<\/li>\n<li>T\u1eadn d\u1ee5ng t\u1ed1t nh\u1ea5t c\u00e1c kh\u1ea3 n\u0103ng c\u1ee7a h\u1ec7 \u0111i\u1ec1u h\u00e0nh c\u01a1 b\u1ea3n. V\u00ed d\u1ee5, n\u1ebfu tri\u1ec3n khai Thread Pool c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng, th\u00ec n\u00f3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u00e0 n\u1ebfu kh\u00f4ng, th\u00ec n\u00ean s\u1eed d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p gh\u00e9p k\u00eanh I\/O m\u1eb7c \u0111\u1ecbnh s\u1ebd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng.<\/li>\n<li>Gi\u1edbi h\u1ea1n c\u00e1c t\u00e0i nguy\u00ean \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng b\u1edfi c\u00e1c Thread.<\/li>\n<\/ul>\n<h2 id=\"Khi_n\u00e0o_s\u1eed_d\u1ee5ng_Thread_Pool\">Khi n\u00e0o s\u1eed d\u1ee5ng Thread Pool<\/h2>\n<div class=\"ddict_div\">\n<p class=\"ddict_sentence\">Thread Pool hi\u1ec7u qu\u1ea3 nh\u1ea5t trong c\u00e1c t\u00ecnh hu\u1ed1ng trong \u0111\u00f3 c\u00e1c truy v\u1ea5n t\u01b0\u01a1ng \u0111\u1ed1i ng\u1eafn v\u00e0 t\u1ea3i b\u1ecb r\u00e0ng bu\u1ed9c b\u1edfi CPU, ch\u1eb3ng h\u1ea1n nh\u01b0 trong kh\u1ed1i l\u01b0\u1ee3ng c\u00f4ng vi\u1ec7c OLTP(Online Transaction Processing). N\u1ebfu kh\u1ed1i l\u01b0\u1ee3ng c\u00f4ng vi\u1ec7c kh\u00f4ng b\u1ecb r\u00e0ng bu\u1ed9c b\u1edfi CPU, th\u00ec b\u1ea1n v\u1eabn c\u00f3 th\u1ec3 h\u01b0\u1edfng l\u1ee3i t\u1eeb vi\u1ec7c gi\u1edbi h\u1ea1n s\u1ed1 l\u01b0\u1ee3ng lu\u1ed3ng \u0111\u1ec3 ti\u1ebft ki\u1ec7m b\u1ed9 nh\u1edb ram cho database memory buffers(b\u1ed9 nh\u1edb \u0111\u1ec7m tr\u00ean ram)<\/p>\n<\/div>\n<h2 id=\"Khi_n\u00e0o_Thread_Pool_s\u1ebd_k\u00e9m_hi\u1ec7u_qu\u1ea3\">Khi n\u00e0o Thread Pool s\u1ebd k\u00e9m hi\u1ec7u qu\u1ea3<\/h2>\n<p>C\u00f3 nh\u1eefng tr\u01b0\u1eddng h\u1ee3p \u0111\u1eb7c bi\u1ec7t, hi\u1ebfm g\u1eb7p trong \u0111\u00f3 Thread Pool\u00a0 k\u00e9m hi\u1ec7u nh\u01b0 sau<\/p>\n<ul>\n<li>N\u1ebfu b\u1ea1n c\u00f3\u00a0<strong>kh\u1ed1i l\u01b0\u1ee3ng c\u00f4ng vi\u1ec7c r\u1ea5t l\u1edbn<\/strong> , th\u00ec Thread Pool c\u00f3 th\u1ec3 kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng t\u1ed1t cho b\u1ea1n. \u0110i\u1ec3n h\u00ecnh trong v\u00ed d\u1ee5 n\u00e0y l\u00e0 r\u1ea5t nhi\u1ec1u c\u00f4ng vi\u1ec7c d\u1eabn \u0111\u1ebfn nhi\u1ec1u Thread g\u00e2y ra b\u1edfi nhi\u1ec1u user tuy nhi\u00ean th\u1eddi gian\u00a0 user s\u1eed d\u1ee5ng r\u1ea5t ng\u1eafn d\u1eabn \u0111\u1ebfn vi\u1ec7c c\u00e1c Thread m\u1edf ra v\u00e0 \u0111\u00e3 ph\u1ee5c v\u1ee5 xong c\u00f4ng vi\u1ec7c nh\u01b0ng kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u00f3ng b\u1edbt Thread.Trong t\u00ecnh hu\u1ed1ng n\u00e0y, hi\u1ec7u su\u1ea5t c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c c\u1ea3i thi\u1ec7n b\u1eb1ng c\u00e1ch \u0111i\u1ec1u ch\u1ec9nh gi\u1ea3m c\u00e1c Thread\u00a0kh\u00f4ng s\u1eed d\u1ee5ng. V\u00ed d\u1ee5: v\u1edbi <a href=\"https:\/\/mariadb.com\/kb\/en\/thread-pool-system-and-status-variables\/#thread_pool_idle_timeout\" rel=\"nofollow noopener\" target=\"_blank\">thread_pool_idle_timeout<\/a><\/li>\n<li>N\u1ebfu b\u1ea1n c\u00f3\u00a0<strong>nhi\u1ec1u truy v\u1ea5n \u0111\u1ed3ng th\u1eddi, d\u00e0i, kh\u00f4ng cho n\u0103ng su\u1ea5t<\/strong> , th\u00ec Thread Pool kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng t\u1ed1t cho b\u1ea1n. C\u00f3 ngh\u0129a l\u00e0\u00a0 nhi\u1ec1u truy v\u1ea5n ho\u1ea1t \u0111\u1ed9ng v\u1edbi th\u1eddi gian d\u00e0i s\u1ebd chi\u1ebfm h\u1ebft c\u00e1c\u00a0 Thread trong Thread Pool l\u00e0m cho c\u00e1c truy v\u1ea5n sau ph\u1ea3i ch\u1edd x\u1eed l\u00fd.\u00a0Tuy nhi\u00ean, Thread Pool \u0111\u00e3 c\u00f3 th\u1ec3 ph\u00e1t hi\u1ec7n\u00a0 \u0111\u1ec3 ng\u0103n ch\u1eb7n ch\u00fang ho\u00e0n to\u00e0n \u0111\u1ed9c quy\u1ec1n ho\u1ea1t \u0111\u1ed9ng tr\u00ean Thread Pool b\u1eb1ng bi\u1ebfn h\u1ec7 th\u1ed1ng <a href=\"https:\/\/mariadb.com\/kb\/en\/thread-pool-system-status-variables\/#thread_pool_stall_limit\" rel=\"nofollow noopener\" target=\"_blank\">thread_pool_stall_limit<\/a><\/li>\n<li>N\u1ebfu b\u1ea1n d\u1ef1a v\u00e0o th\u1ef1c t\u1ebf l\u00e0\u00a0<strong>c\u00e1c truy v\u1ea5n \u0111\u01a1n gi\u1ea3n lu\u00f4n k\u1ebft th\u00fac nhanh ch\u00f3ng<\/strong> , b\u1ea5t k\u1ec3 m\u00e1y ch\u1ee7 c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n \u0111\u01b0\u1ee3c t\u1ea3i nh\u01b0 th\u1ebf n\u00e0o, th\u00ec Thread Pool c\u00f3 th\u1ec3 kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng t\u1ed1t cho b\u1ea1n. Khi Thread Pool \u0111\u01b0\u1ee3c b\u1eadt tr\u00ean m\u00e1y ch\u1ee7 c\u00f3\u00a0 c\u00f3 t\u1ea3i cao, v\u01b0\u1ee3t qu\u00e1 t\u00e0i nguy\u00ean c\u00f3 s\u1eb5n. \u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 ngay c\u1ea3 khi b\u1ea3n th\u00e2n c\u00e2u l\u1ec7nh kh\u00f4ng m\u1ea5t nhi\u1ec1u th\u1eddi gian \u0111\u1ec3 th\u1ef1c thi, th\u1eadm ch\u00ed \u0111\u01a1n gi\u1ea3n nh\u01b0 c\u00e1c c\u00e2u\u00a0 l\u1ec7nh \u0111\u01a1n gi\u1ea3n &#8220;SELECT 1&#8221; c\u00f3 th\u1ec3 m\u1ea5t nhi\u1ec1u th\u1eddi gian h\u01a1n khi Thread Pool \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t so v\u1edbi one-thread-per-connection khi n\u00f3 \u0111\u01b0\u1ee3c x\u1ebfp h\u00e0ng.<\/li>\n<\/ul>\n<h2 id=\"C\u1ea5u_h\u00ecnh_Thread_Pool_tr\u00ean_h\u1ec7_th\u1ed1ng_Unix\">C\u1ea5u h\u00ecnh Thread Pool tr\u00ean h\u1ec7 th\u1ed1ng Unix<\/h2>\n<p>Bi\u1ebfn thread_handling\u00a0 l\u00e0 bi\u1ebfn h\u1ec7 th\u1ed1ng ch\u00ednh \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 c\u1ea5u h\u00ecnh Thread Pool.<\/p>\n<p>B\u1ea1n c\u00f3 th\u1ec3 th\u00eam c\u1ea5u h\u00ecnh sau v\u00e0o file my.cnf\u00a0 v\u00e0 kh\u1edfi \u0111\u1ed9ng l\u1ea1i MariaDB \u0111\u1ec3 k\u00edch ho\u1ea1t.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">[mariadb]\r\n...\r\nthread_handling = pool-of-thread<\/pre>\n<p>C\u00e1c bi\u1ebfn h\u1ec7 th\u1ed1ng sau \u0111\u00e2y c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh tr\u00ean Unix:<\/p>\n<ul>\n<li>thread_pool_size &#8211; S\u1ed1 l\u01b0\u1ee3ng thread groups trong Thread Pool, x\u00e1c \u0111\u1ecbnh c\u00f3 bao nhi\u00eau c\u00e2u l\u1ec7nh c\u00f3 th\u1ec3 th\u1ef1c thi \u0111\u1ed3ng th\u1eddi. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 s\u1ed1 l\u01b0\u1ee3ng CPU tr\u00ean h\u1ec7 th\u1ed1ng. \u0110\u1eb7t gi\u00e1 tr\u1ecb c\u1ee7a bi\u1ebfn h\u1ec7 th\u1ed1ng n\u00e0y khi kh\u1edfi \u0111\u1ed9ng h\u1ec7 th\u1ed1ng, gi\u00e1 tr\u1ecb t\u1ed1i \u0111a c\u00f3 th\u1ec3 \u0111\u1eb7t l\u00e0 100000. Vi\u1ec7c tri\u1ec3n khai Thread Pool s\u1eed d\u1ee5ng c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 thread groups \u0111\u1ec3 ph\u00e2n chia c\u00e1c k\u1ebft n\u1ed1i m\u00e1y kh\u00e1ch th\u00e0nh nhi\u1ec1u threads \u0111\u1ed9c l\u1eadp. Bi\u1ebfn thread_pool_size x\u00e1c \u0111\u1ecbnh s\u1ed1 l\u01b0\u1ee3ng thread groups tr\u00ean m\u1ed9t h\u1ec7 th\u1ed1ng. N\u00f3i chung, m\u1ee5c ti\u00eau c\u1ee7a vi\u1ec7c th\u1ef1c hi\u1ec7n thread group l\u00e0 \u0111\u1ec3 c\u00f3 m\u1ed9t thread ch\u1ea1y tr\u00ean m\u1ed7i CPU tr\u00ean h\u1ec7 th\u1ed1ng t\u1ea1i m\u1ed9t th\u1eddi \u0111i\u1ec3m. Do \u0111\u00f3, gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a thread_pool_size bi\u1ebfn h\u1ec7 th\u1ed1ng c\u00f3 k\u00edch th\u01b0\u1edbc t\u1ef1 \u0111\u1ed9ng theo s\u1ed1 l\u01b0\u1ee3ng CPU tr\u00ean h\u1ec7 th\u1ed1ng. Khi mu\u1ed1n th\u00f4ng s\u1ed1 thread groups \u0111\u01b0\u1ee3c thay \u0111\u1ed5i t\u1ef1 \u0111\u1ed9ng 1 c\u00e1ch linh ho\u1ea1t ta kh\u00f4ng set th\u00f4ng s\u1ed1 n\u00e0y qu\u00e1 128. Nh\u01b0 v\u00ed d\u1ee5 d\u01b0\u1edbi \u0111\u00e2y ta ch\u1ec9 set 32.\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">[mariadb] \r\n.. \r\nthread_handling = pool-of-thread \r\nthread_pool_size = 32<\/pre>\n<\/li>\n<li>thread_pool_max_threads : S\u1ed1 l\u01b0\u1ee3ng thread t\u1ed1i \u0111a trong nh\u00f3m Thread Pool. Khi \u0111\u1ea1t \u0111\u1ebfn gi\u1edbi h\u1ea1n n\u00e0y, s\u1ebd kh\u00f4ng c\u00f3 thread m\u1edbi n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o trong h\u1ea7u h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p. Trong c\u00e1c tr\u01b0\u1eddng h\u1ee3p hi\u1ebfm hoi, s\u1ed1 l\u01b0\u1ee3ng thread th\u1ef1c t\u1ebf c\u00f3 th\u1ec3 v\u01b0\u1ee3t qu\u00e1 m\u1ee9c n\u00e0y m\u1ed9t ch\u00fat, b\u1edfi v\u00ec m\u1ed7i Thread Pool c\u1ea7n \u00edt nh\u1ea5t hai thread (t\u1ee9c l\u00e0 \u00edt nh\u1ea5t m\u1ed9t worker thread v\u00e0 \u00edt nh\u1ea5t m\u1ed9t \u00a0listener thread). Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh trong MariaDB 5.5 v\u00e0 MariaDB 10.0 l\u00e0 500. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh trong MariaDB 10.1 l\u00e0 1000 trong MariaDB 10.1 . Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh trong MariaDB 10.2 tr\u1edf l\u00ean l\u00e0 65536.<\/li>\n<li>thread_pool_stall_limit : S\u1ed1 mili gi\u00e2y gi\u1eefa m\u1ed7i l\u1ea7n ki\u1ec3m tra\u00a0 ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u00e1c thread \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1edfi th\u1eddi gian quy \u0111\u1ecbnh cho m\u1ed7i thread(timer thread). Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 500. Khi timer thread ph\u00e1t hi\u1ec7n ra r\u1eb1ng m\u1ed9t thread group b\u1ecb \u0111\u00ecnh tr\u1ec7, n\u00f3 s\u1ebd \u0111\u00e1nh th\u1ee9c m\u1ed9t worker thread \u0111ang ng\u1ee7 trong thread group, n\u1ebfu c\u00f3 s\u1eb5n m\u1ed9t nh\u00f3m. N\u1ebfu kh\u00f4ng c\u00f3 c\u00e1i n\u00e0o, th\u00ec n\u00f3 t\u1ea1o ra m\u1ed9t lu\u1ed3ng c\u00f4ng nh\u00e2n m\u1edbi trong nh\u00f3m lu\u1ed3ng n\u1ebfu c\u00f3 th\u1ec3. \u0110i\u1ec1u n\u00e0y t\u1ea1m th\u1eddi cho ph\u00e9p m\u1ed9t s\u1ed1 k\u1ebft n\u1ed1i m\u00e1y kh\u00e1ch trong thread group ch\u1ea1y song song. Tuy nhi\u00ean, l\u01b0u \u00fd r\u1eb1ng timer thread\u00a0 s\u1ebd kh\u00f4ng t\u1ea1o ra worker thread m\u1edbi n\u1ebfu s\u1ed1 l\u01b0\u1ee3ng thread trong thread pool \u0111\u00e3 l\u1edbn h\u01a1n ho\u1eb7c b\u1eb1ng m\u1ee9c t\u1ed1i \u0111a \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1edfi bi\u1ebfn h\u1ec7 th\u1ed1ng thread_pool_max_threads, tr\u1eeb khi thread group ch\u01b0a c\u00f3 listener thread.<\/li>\n<li>thread_pool_oversubscribe : X\u00e1c \u0111\u1ecbnh c\u00f3 bao nhi\u00eau worker threads trong m\u1ed9t thread group c\u00f3 th\u1ec3 duy tr\u00ec ho\u1ea1t \u0111\u1ed9ng c\u00f9ng m\u1ed9t l\u00fac khi m\u1ed9t thread group \u0111\u01b0\u1ee3c \u0111\u0103ng k\u00fd v\u01b0\u1ee3t m\u1ee9c. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 3. Th\u00f4ng th\u01b0\u1eddng, m\u1ed9t thread group ch\u1ec9 c\u00f3 m\u1ed9t worker thread ho\u1ea1t \u0111\u1ed9ng t\u1ea1i m\u1ed9t th\u1eddi \u0111i\u1ec3m. Tuy nhi\u00ean, timer thread c\u00f3 th\u1ec3 th\u00eam c\u00e1c worker thread ho\u1ea1t \u0111\u1ed9ng nhi\u1ec1u h\u01a1n v\u00e0o m\u1ed9t thread group n\u1ebfu n\u00f3 ph\u00e1t hi\u1ec7n ra\u00a0 v\u01b0\u1ee3t s\u1ed1 l\u01b0\u01a1ng thread quy \u0111\u1ecbnh .\u00a0 Ch\u1ec9 cho ph\u00e9p m\u1ed9t thread tr\u00ean m\u1ed7i CPU c\u00f3 ngh\u0129a l\u00e0 thread c\u00f3 th\u1ec3 c\u00f3 quy\u1ec1n truy c\u1eadp kh\u00f4ng h\u1ea1n ch\u1ebf v\u00e0o CPU khi ch\u1ea1y, nh\u01b0ng \u0111i\u1ec1u \u0111\u00f3 c\u0169ng c\u00f3 ngh\u0129a l\u00e0 c\u00f3 th\u00eam chi ph\u00ed t\u1eeb vi\u1ec7c \u0111\u01b0a thread v\u00e0o ch\u1ebf \u0111\u1ed9 ng\u1ee7 ho\u1eb7c \u0111\u00e1nh th\u1ee9c ch\u00fang th\u01b0\u1eddng xuy\u00ean h\u01a1n. Cho ph\u00e9p nhi\u1ec1u h\u01a1n m\u1ed9t thread tr\u00ean m\u1ed7i CPU c\u00f3 ngh\u0129a l\u00e0 c\u00e1c thread ph\u1ea3i chia s\u1ebb CPU, nh\u01b0ng \u0111i\u1ec1u \u0111\u00f3 c\u0169ng c\u00f3 ngh\u0129a l\u00e0 c\u00f3 \u00edt chi ph\u00ed h\u01a1n t\u1eeb vi\u1ec7c \u0111\u01b0a c\u00e1c thread v\u00e0o ch\u1ebf \u0111\u1ed9 ng\u1ee7 ho\u1eb7c \u0111\u00e1nh th\u1ee9c ch\u00fang.<\/li>\n<li>thread_pool_idle_timeout : S\u1ed1 gi\u00e2y tr\u01b0\u1edbc khi m\u1ed9t worker thread r\u1ed7i k\u1ebft th\u00fac. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 60. N\u1ebfu hi\u1ec7n t\u1ea1i kh\u00f4ng c\u00f3 vi\u1ec7c g\u00ec \u0111\u1ec3 l\u00e0m, m\u1ed9t thread nh\u00e0n r\u1ed7i n\u00ean \u0111\u1ee3i bao l\u00e2u tr\u01b0\u1edbc khi tho\u00e1t?<\/li>\n<\/ul>\n<h2 id=\"C\u1ea5u_h\u00ecnh_l\u1eadp\u00a0_l\u1ecbch_\u01b0u_ti\u00ean\">C\u1ea5u h\u00ecnh l\u1eadp\u00a0 l\u1ecbch \u01b0u ti\u00ean<\/h2>\n<p>B\u1eaft \u0111\u1ea7u v\u1edbi MariaDB 10.2.2 , c\u00f3 th\u1ec3 \u0111\u1ecbnh c\u1ea5u h\u00ecnh m\u1ee9c \u0111\u1ed9 \u01b0u ti\u00ean k\u1ebft n\u1ed1i. H\u00e0nh vi \u01b0u ti\u00ean \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh b\u1edfi thread_pool_priority .<\/p>\n<p>Theo m\u1eb7c \u0111\u1ecbnh, n\u1ebfu thread_pool_priority \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh auto, th\u00ec c\u00e1c query s\u1ebd \u0111\u01b0\u1ee3c \u01b0u ti\u00ean cao h\u01a1n trong tr\u01b0\u1eddng h\u1ee3p k\u1ebft n\u1ed1i hi\u1ec7n t\u1ea1i n\u1eb1m trong m\u1ed9t transaction. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p transaction \u0111ang ch\u1ea1y k\u1ebft th\u00fac nhanh h\u01a1n v\u00e0 c\u00f3 t\u00e1c d\u1ee5ng h\u1ea1 th\u1ea5p s\u1ed1 l\u01b0\u1ee3ng transaction \u0111ang ch\u1ea1y song song. C\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh th\u01b0\u1eddng s\u1ebd c\u1ea3i thi\u1ec7n th\u00f4ng l\u01b0\u1ee3ng cho kh\u1ed1i l\u01b0\u1ee3ng c\u00f4ng vi\u1ec7c transaction. Nh\u01b0ng c\u0169ng c\u00f3 th\u1ec3 \u0111\u1eb7t r\u00f5 r\u00e0ng m\u1ee9c \u0111\u1ed9 \u01b0u ti\u00ean cho k\u1ebft n\u1ed1i hi\u1ec7n t\u1ea1i th\u00e0nh &#8216;cao&#8217; ho\u1eb7c &#8216;th\u1ea5p&#8217;.<\/p>\n<p>Ngo\u00e0i ra c\u00f2n c\u00f3 m\u1ed9t c\u01a1 ch\u1ebf \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o r\u1eb1ng c\u00e1c k\u1ebft n\u1ed1i \u01b0u ti\u00ean cao h\u01a1n s\u1ebd kh\u00f4ng \u0111\u1ed9c quy\u1ec1n c\u00e1c lu\u1ed3ng c\u00f4ng nh\u00e2n trong nh\u00f3m (\u0111i\u1ec1u n\u00e0y s\u1ebd g\u00e2y ra s\u1ef1 ch\u1eadm tr\u1ec5 v\u00f4 th\u1eddi h\u1ea1n cho c\u00e1c k\u1ebft n\u1ed1i \u01b0u ti\u00ean th\u1ea5p). Tr\u00ean Unix, c\u00e1c k\u1ebft n\u1ed1i \u01b0u ti\u00ean th\u1ea5p \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o h\u00e0ng \u01b0u ti\u00ean cao sau khi h\u1ebft th\u1eddi gian \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh b\u1edfi thread_pool_prio_kickup_timer .<\/p>\n<h2 id=\"Monitoring_Thread_Pool\">Monitoring Thread Pool<\/h2>\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<th style=\"width: 22.25%;\">Variable<\/th>\n<th style=\"width: 76.875%;\">Description<\/th>\n<\/tr>\n<tr>\n<td style=\"width: 22.25%;\"><code><\/code><a href=\"https:\/\/mariadb.com\/kb\/en\/thread-pool-system-and-status-variables\/#threadpool_threads\" rel=\"nofollow noopener\" target=\"_blank\">Threadpool_threads<\/a><\/td>\n<td style=\"width: 76.875%;\">S\u1ed1 l\u01b0\u1ee3ng thread trong thread pool. Trong c\u00e1c tr\u01b0\u1eddng h\u1ee3p hi\u1ebfm hoi, gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 cao h\u01a1n m\u1ed9t ch\u00fat thread_pool_max_threads, b\u1edfi v\u00ec m\u1ed7i thread group c\u1ea7n \u00edt nh\u1ea5t hai threads (t\u1ee9c l\u00e0 \u00edt nh\u1ea5t m\u1ed9t worker thread v\u00e0 \u00edt nh\u1ea5t m\u1ed9t \u00a0listener thread) \u0111\u1ec3 ng\u0103n ch\u1eb7n t\u1eaft ngh\u1ebdn.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 22.25%;\"><code><\/code><a href=\"https:\/\/mariadb.com\/kb\/en\/thread-pool-system-and-status-variables\/#threadpool_idle_threads\" rel=\"nofollow noopener\" target=\"_blank\">Threadpool_idle_threads<\/a><\/td>\n<td style=\"width: 76.875%;\">S\u1ed1 l\u01b0\u1ee3ng thread kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng trong thread pool. Thread tr\u1edf n\u00ean kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng v\u00ec nhi\u1ec1u l\u00fd do, ch\u1eb3ng h\u1ea1n nh\u01b0 b\u1eb1ng c\u00e1ch ch\u1edd \u0111\u1ee3i c\u00f4ng vi\u1ec7c m\u1edbi. Tuy nhi\u00ean, m\u1ed9t thread kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng nh\u1ea5t thi\u1ebft l\u00e0 m\u1ed9t thread ch\u01b0a \u0111\u01b0\u1ee3c ph\u00e2n c\u00f4ng c\u00f4ng vi\u1ec7c. thread c\u0169ng \u0111\u01b0\u1ee3c coi l\u00e0 kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng n\u1ebfu ch\u00fang b\u1ecb ch\u1eb7n trong khi ch\u1edd v\u00e0o I\/O tr\u00ean \u0111\u0129a ho\u1eb7c trong khi ch\u1edd kh\u00f3a, v.v. Bi\u1ebfn tr\u1ea1ng th\u00e1i n\u00e0y ch\u1ec9 c\u00f3 \u00fd ngh\u0129a tr\u00ean Unix .<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"Notes.\">Notes.<\/h2>\n<p>C\u00e1c thread_cache_size kh\u00f4ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng khi c\u00e1c thread pool \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng v\u00e0 c\u00e1c Threads_cached\u00a0 s\u1ebd c\u00f3 m\u1ed9t gi\u00e1 tr\u1ecb l\u00e0 0.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Thread Pools c\u00f3 th\u1ec3 l\u00e0m g\u00ec? Theo truy\u1ec1n th\u1ed1ng, MySQL \u0111\u00e3 g\u00e1n m\u1ed9t Thread cho m\u1ecdi k\u1ebft n\u1ed1i client v\u00e0 khi s\u1ed1 l\u01b0\u1ee3ng user \u0111\u1ed3ng th\u1eddi t\u0103ng l\u00ean, m\u00f4 h\u00ecnh n\u00e0y cho th\u1ea5y hi\u1ec7u su\u1ea5t gi\u1ea3m. Nhi\u1ec1u lu\u1ed3ng ho\u1ea1t \u0111\u1ed9ng s\u1ebd gi\u1ebft hi\u1ec7u n\u0103ng, b\u1edfi v\u00ec vi\u1ec7c t\u0103ng s\u1ed1 l\u01b0\u1ee3ng Thread d\u1eabn \u0111\u1ebfn chuy\u1ec3n \u0111\u1ed5i [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":16424,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"tags":[],"ht_kb_category":[5156],"class_list":["post-4136","ht_kb","type-ht_kb","status-publish","format-standard","has-post-thumbnail","hentry","ht_kb_category-mariadb"],"_links":{"self":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb\/4136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/comments?post=4136"}],"version-history":[{"count":0,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb\/4136\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media\/16424"}],"wp:attachment":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media?parent=4136"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/tags?post=4136"},{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/ht_kb_category?post=4136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}