Knex: "Knex: 연결을 νšλ“ν•˜λŠ” λ™μ•ˆ μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 풀이 꽉 찼을 수 μžˆμŠ΅λ‹ˆλ‹€."κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. 였λ₯˜

에 λ§Œλ“  2017λ…„ 11μ›” 02일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: knex/knex

"μ²˜λ¦¬λ˜μ§€ μ•Šμ€ κ±°λΆ€ μ‹œκ°„ 초과 였λ₯˜: Knex: 연결을 νšλ“ν•˜λŠ” μ‹œκ°„ μ΄ˆκ³Όμž…λ‹ˆλ‹€. 풀이 꽉 찼을 수 μžˆμŠ΅λ‹ˆλ‹€. .transacting(trx) 호좜이 λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆκΉŒ?" 문제. μ‹€ν–‰ 쀑인 쿼리가 λ„ˆλ¬΄ λ§Žμ•„μ„œ 원인을 μ°ΎλŠ” 쿼리λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” postgres 크기가 증가할 λ•Œ μ‹¬κ°ν•΄μ§€λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ–΄λ–€ 해결책이 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹€μŒ λ²„μ „μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

λͺ¨λ“  18 λŒ“κΈ€

λ‚˜λŠ” λ˜ν•œμ΄ λ¬Έμ œμ— 직면 ν•΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 같은 문제λ₯Ό κ°€μ§€κ³ μžˆλ‹€.

해결책은 μ†ŒμŠ€λ₯Ό λΆ„λ¦¬ν•˜κ³  μˆ˜μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이것은 "쿼리" 였λ₯˜κ°€ μ•„λ‹ˆλΌ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜ λ¬Έμ œμž…λ‹ˆλ‹€. 였λ₯˜λŠ” knexκ°€ (κΈ°λ³Έκ°’) 60초 이내에 연결을 νšλ“ν•  수 없을 λ•Œ λ°œμƒν•˜λ©° κ·Έ μ΄μœ λŠ” 풀이 가득 μ°ΌκΈ° λ•Œλ¬ΈμΌ κ°€λŠ₯성이 ν½λ‹ˆλ‹€.

즉, 였λ₯˜λ₯Ό μΌμœΌν‚¬ 수 μžˆλŠ” λ§Žμ€ 것듀이 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 일반적인 두 κ°€μ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. νŠΈλžœμž­μ…˜μ„ μ»€λ°‹ν•˜λŠ” 것을 μžŠκ±°λ‚˜ 쿼리 λΉŒλ”μ—μ„œ .transacing(trx) λ₯Ό ν˜ΈμΆœν•˜λŠ” 것을 μžŠμ—ˆμŠ΅λ‹ˆλ‹€. 이미 μ΅œλŒ€ 풀에 μžˆλŠ” λ™μ•ˆ νŠΈλžœμž­μ…˜μ„ 유휴 μƒνƒœλ‘œ λ§Œλ“€ 뿐만 μ•„λ‹ˆλΌ 연결을 얻을 수 μ—†κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  2. 풀은 예λ₯Ό λ“€μ–΄ νŠΈλž˜ν”½μ΄ λ§Žκ±°λ‚˜ 였래 μ‹€ν–‰λ˜λŠ” 절차둜 인해 쉬지 μ•Šκ³  μ΅œμ†Œ(κΈ°λ³Έκ°’) 60초 λ™μ•ˆ μ΅œλŒ€ μš©λŸ‰μœΌλ‘œ 계속 μ‚¬μš© μ€‘μž…λ‹ˆλ‹€.

이 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ₯Ό μ‚΄νŽ΄λ΄μ•Ό ν•©λ‹ˆλ‹€. 유휴 연결이 많이 μžˆμŠ΅λ‹ˆκΉŒ? λ„ˆλ¬΄ λ§Žμ€ 연결이 μžˆμŠ΅λ‹ˆκΉŒ? λ“±.

λ‚˜λŠ” λ˜ν•œμ΄ 였λ₯˜μ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

rejecter(new _bluebird2.default.TimeoutError('Knex: Timeout acquiring a connection. The pool is probably full. ' + 'Are you missing a .transacting(trx) call?')); ^ TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?

μ•„ν‚€ν…μ²˜ 연결을 νŒŒν—€μΉ˜λŠ” λ™μ•ˆ 이 였λ₯˜κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μΆ©λŒμ„ λ°©μ§€ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? μ•„λ‹ˆλ©΄ 적어도 였λ₯˜κ°€ μŠ€νƒμ„ 가리킬 수 μžˆμŠ΅λ‹ˆκΉŒ?

@rsfernandes λΉŒλ”μ—μ„œ catch ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν•˜λŠ” ν•œ 이 였λ₯˜κ°€ 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μΆ©λŒμ‹œν‚€λŠ” 방법을 μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

μŠ€νƒμ— κ΄€ν•΄μ„œλŠ” longStackTraces λ₯Ό μΆ”μ²œν•©λ‹ˆλ‹€. 이 였λ₯˜ μŠ€νƒμ„ μœ„ν•΄ νŠΉλ³„νžˆ knex에 λ‚΄μž₯된 것은 μ—†μŠ΅λ‹ˆλ‹€.

FWIW AWS Aurora λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€μ—μ„œ 이 였λ₯˜κ°€ λ°œμƒν–ˆμœΌλ©° λΉ„ν™œμ„± ν›„ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ’…λ£Œν•˜λŠ” μžλ™ μ’…λ£Œ κΈ°λŠ₯으둜 인해 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€(λ°μ΄ν„°λ² μ΄μŠ€μ˜ μžλ™ μ‹œμž‘μ€ 1λΆ„ 정도 μ†Œμš”λ˜λ©° 이둜 인해 knexκ°€ μ‹œκ°„ 초과됨)

https://github.com/tgriesser/knex/issues/3159 μ˜€λ‘œλΌμ— λŒ€ν•œ μ œμ•ˆμ— λŒ€ν•œ λͺ‡ 가지 ν•΄κ²° 방법 λͺ©λ‘μ΄ μžˆμŠ΅λ‹ˆλ‹€.

@wubzz

  1. 풀은 예λ₯Ό λ“€μ–΄ νŠΈλž˜ν”½μ΄ λ§Žκ±°λ‚˜ 였래 μ‹€ν–‰λ˜λŠ” 절차둜 인해 쉬지 μ•Šκ³  μ΅œμ†Œ(κΈ°λ³Έκ°’) 60초 λ™μ•ˆ μ΅œλŒ€ μš©λŸ‰μœΌλ‘œ 계속 μ‚¬μš© μ€‘μž…λ‹ˆλ‹€.

이것이 문제라면 λ‹¨μˆœνžˆ μž‘μ—…μ„ 덜 μˆ˜ν–‰ν•  수 μ—†λŠ” 경우 μ·¨ν•  수 μžˆλŠ” ꢌμž₯ 사항은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? πŸ˜‚

μ‹œκ°„ 초과 λ˜λŠ” μ΅œλŒ€ μš©λŸ‰μ„ λŠ˜λ¦¬μ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ‚΄ λ¬Έμ œλŠ” knexκ°€ μ•„λ‹ˆλΌ λ‚΄ aws RDS의 λ³΄μ•ˆ κ·Έλ£Ή μΈλ°”μš΄λ“œ κ·œμΉ™μ— μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‚΄ 둜컬 컴퓨터 IP μ£Όμ†Œλ‘œλ§Œ μ„€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ ec2 μΈμŠ€ν„΄μŠ€μ—μ„œ μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 였λ₯˜ λ©”μ‹œμ§€κ°€ λ„μ›€μ΄λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ‹€λ§ν–ˆμŠ΅λ‹ˆλ‹€.
이 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ˜λ©΄ knexκ°€ 연결을 μ„€μ •ν•  수 μ—†λ‹€λŠ” 사싀과 관련이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ„€νŠΈμ›Œν¬λ„ ν™•μΈν•˜μ‹­μ‹œμ˜€!

예, 연결이 μ™„μ „νžˆ μ°¨λ‹¨λœ 경우 λ°œμƒν•  수 μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. λ‹€λ₯Έ μ—°κ²° μ‹œκ°„ μ΄ˆκ³Όμ™€ acquite μ‹œκ°„ 초과λ₯Ό μ„€μ •ν•˜λ©΄ 이 두 경우λ₯Ό ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ λ²„μ „μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

λ…Έλ“œ 14κ°€ μ•„λ‹Œ λ…Έλ“œ 12둜 μ „ν™˜ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ ν’€ μ œν•œμ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ΅œμ†Œ 및 μ΅œλŒ€κ°’μ„ μ„€μ •ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ Macμ—μ„œ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λͺ…령쀄 ν„°λ―Έλ„μ—μ„œ knexλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμ—ˆλŠ”λ° κ°‘μžκΈ° 이 Knex: Timeout... λ¬Έμ œκ°€ ν‘œμ‹œλ˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ bash λŒ€μ‹  zsh μ…Έλ‘œ μ΄λ™ν•˜κ³  μžˆλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ˜€λž«λ™μ•ˆ bashλ₯Ό μ‚¬μš©ν•΄ μ™”μœΌλ©° 졜근 Apple 지침에 따라 zsh둜 μ „ν™˜μ„ μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€. bash둜 λŒμ•„κ°€μž 마자 ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λˆ„κ΅°κ°€μ—κ²Œ 도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

λ…Έλ“œ 14κ°€ μ•„λ‹Œ λ…Έλ“œ 12둜 μ „ν™˜ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이것은 λ…Έλ“œ (v14) λŒ€μ‹  mac docker-compose node:12 μ—μ„œ μ €μ—κ²Œ νš¨κ³Όμ μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”.

nvm exec 12 node ./src/index... λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ˜ λ…Έλ“œ 버전을 μ‚¬μš©ν•˜μ—¬ κ°•μ œ μ‹€ν–‰ν•˜λ €κ³  ν–ˆλŠ”λ° μœ„μ™€ 같은 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λ…Έλ“œλ₯Ό 직접 μ‹€ν–‰ν•˜λ©΄ 였λ₯˜κ°€ 사라지고 연결이 μ„€μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ 일반 μ„€μ •κ³Ό λ…Έλ“œ 12λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

@batadamnjanovic 당신은 μ΄ν‹€μ˜ 연ꡬ 끝에 μ €λ₯Ό κ΅¬ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. 타이!!

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰