dolog

병목 현상 해결 : 데이터 베이스 연결 주의하기 본문

톺아보기

병목 현상 해결 : 데이터 베이스 연결 주의하기

dokite 2024. 5. 20. 15:11

문제 상황

  • cron.schedule 외부에서 한 connection 연결로 인해 매번 새로운 연결을 하다 보니 병목 현상이 발생했다.
    이로 인해 요청 시 pending 상태가 길어지고, 심하면 timeout까지 가는 이슈가 생겼다.

 

문제 해결

  • cron.schedule 내부로 connection 이동해서 연결 재사용으로 병목 현상 해결
const cronScheduler = async () => {
	cron.schedule('*/5 * * * *', async () => {
    	// cron.schedule 내부에서 연결
		const connection = await promisePool.getConnection();
		const updateMarketDetailQuery =
			'UPDATE Coin SET id=?, name=?, symbol=?, price=?, percent_change_24h=?, cmc_rank=? Where id=?';

		try {
			const marketDetail = await getCoinMarketCap();

			for (const market of marketDetail) {
				const { id, name, symbol, quote, cmc_rank } = market;
				const { price, percent_change_24h } = quote['USD'];

				await connection.query(updateMarketDetailQuery, [
					id,
					name,
					symbol,
					price,
					percent_change_24h,
					cmc_rank,
					id,
				]);
			}

			console.log('5분마다 실행 : All data changed!');
		} catch (error) {
			console.error(error);
		} finally {
			connection.release();
		}
	});
};

cronScheduler();