2018ǯ02��08��

Re: Configuring sql.DB for Better Performance

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

Configuring sql.DB for Better Performance �Ȥ����������Τ�ޤ����� ���ͥ������ס�����礭�������椹��3�Ĥ��������ǫ�˲��⤵�줿�ȤƤ��ɤ������Ǥ���

�����������ε����ǿ侩����Ƥ�������ˤĤ��Ƥ�Ʊ�դ��뤳�Ȥ��Ǥ��ޤ��󡣻䤬�侩��������Ȥ�����ͳ����⤷�Ƥ��������Ȼפ��ޤ���

Limit ConnMaxLifetime instead of MaxIdleConns

Allowing just 1 idle connection to be retained and reused makes a massive difference to this particular benchmark — it cuts the average runtime by about 8 times and reduces memory usage by about 20 times. Going on to increase the size of the idle connection pool makes the performance even better, although the improvements are less pronounced.

���Ρ� "to this particular benchmark" �Ȥ����Τ�����Ǥ������Υ٥���ޡ����Ǥϡ�8����Ǿ��DB�˥�������ꤲ³���Ƥ��ޤ���1�ĤΥ����꤬��λ����Ȥ����˼��Υ�������ꤲ��Τǡ� DB.SetMaxIdleConns(1) ���礭�ʸ��̤�����ޤ�����

���Υ٥���ޡ�����ư��ϡ��㤨��DB�����̤Υǡ�������������Хå������ʤɤ����ƤϤޤ�ޤ�����Web ���ץꥱ�������ʤɤˤ����ƤϤޤ�ޤ���

1�ô֤�1000�󥯥����¹Ԥ��륢�ץꥱ�����������ꤷ����ñ�ʥ��ߥ�졼����񤤤Ƥߤޤ�����������ϰ���ʬ�ۤǥ�����ʥ����ߥ󥰤Ǽ¹Ԥ��졢�ƥ�����ȿ�����³�ˤ�10ms������Ȥ��ޤ��� (���Υ��ߥ�졼����gist)

MaxOpenConns(20) �λ��� MaxIdleConns(4) �� MaxIdleConns(10) ��ư�����٤Ƥߤޤ��礦������󥸤���������³�����Ĥ����ϻ��������³�����Ф�������³�����Ѳ�ǽ�ˤʤ�Τ��ԤäƤ�����֤κ����ͤ�ߥ��ä�ɽ���Ƥ��ޤ���

maxidle-4-vs-10

1000��Υ������¹Ԥ���Τˡ� MaxIdleConns(4) ���� 285 ����³���Ƥ��ޤ����� MaxIdleConns(10) ���Ȥ���� 69 ��ޤǸ��餹���Ȥ��Ǥ��Ƥ��ޤ��������ǡ���٤��ߤޤä���⤺�äȰݻ���³������³�������Ƥ��ޤäƤ��ޤ���

���٤� SetMaxIdleConns(100); SetConnMaxLifetime(time.MilliSecond * 300) �Υ��ߥ�졼������̤򸫤Ƥ���������

maxlifetime-300

20x4=80 �����³�򤷤Ƥ��ޤ��� MaxIdleConns(10) �ΤȤ��� 69 �����¿���Ǥ����������ư���狼��䤹�����뤿��� lifetime ��û�����ꤷ�Ƥ��뤿��Ǥ������ߥ�졼�������֤�100�ä˿��Ф����顢MaxIdleConns(10) �ξ��Ǥ���³����Ϥ��褽 690 ��ˤʤꡢ SetConnMaxLifetime(time.Second * 30) �ξ�����³����� 80 ��ˤʤ�Ǥ��礦��

���Υ���դǡ�����³������Υ����ߥ󥰤˽��椷�����Υ����ߥ󥰤ǥ쥤�ƥ󥷤����ӤƤ��ޤäƤ���Τ����ˤʤ뤫�⤷��ޤ��󡣤���ϥ��ߥ�졼����󤬴����˰���ʬ�ۤˤʤäƤ��ơ��ǽ�����Ƥ���³���ۤ�Ʊ���˺���Ƥ��ޤäƤ��뤫��Ǥ������֤ˤ�ä���٤���ư���륢�ץꥱ�������Ǥϡ���³������륿���ߥ󥰤���ä�ʬ������Τǡ����Υ��ѥ�����ȯ�����ˤ����Ϥ��Ǥ������Υ���դϡ�200ms�������ʳ�Ū����٤���������ˡ���Υ���դ�Ʊ��1000ms����٤������ä��Ȥ��Τ�ΤǤ���

maxlifetime-300-2

SetConnMaxLifetime ��Ȥ�¾����ͳ

DB.SetConnMaxLifetime() ����Ƥ����������Τϻ�Ǥ�������API�ϥ����ɥ����³�򸺤餹 SetMaxIdleConns() �����ɤ���ˡ�Ǥ�������������ǤϤ���ޤ���

"Configuring sql.DB for Better Performance" �ǾҲ𤵤줿�Ȥ��ꡢ MySQL �Ǥ� wait_timeout �Ȥ����������³�������С������ڤ��붲�줬����ޤ����ޤ���OS��롼������Ĺ�������Ѥ���Ƥ��ʤ�TCP��³�����Ǥ��뤳�Ȥ⤢��ޤ����ɤΥ������Ǥ⡢ go-sql-driver/mysql �ϥ���������������塢�쥹�ݥ󥹤�������褦�Ȥ��ƽ���TCP�����Ǥ��줿���Ȥ��Τ�ޤ������Ǥ��Τ���Τ˲����ä⤫���뤫�⤷��ޤ��󤷡��������������꤬�¹Ԥ��줿���ɤ������Τ뤳�Ȥ�Ǥ��ʤ��Τǰ����ʥ�ȥ饤��Ǥ��ޤ���

�������ä�������ʤ�٤��򤱤뤿��ˤϡ�Ĺ���ֻȤ��Ƥ��ʤ��ä���³������Ѥ��������Ǥ�����������³��Ȥ��٤��Ǥ��� SetConnMaxLifetime() ����³�μ�̿�����ꤹ��API�Ǥ�������̿��10�ä����ꤷ�Ƥ����С�10�ûȤ��Ƥ��ʤ��ä���³������Ѥ��뤳�Ȥ⤢��ޤ���

��³�μ�̿�����ꤹ�뤳�Ȥǡ�¾�ˤ���Ĥ���������н褹�뤳�Ȥ��Ǥ��ޤ���

  • DB�����С��������ɥХ�󥹤���Ƥ���Ȥ��������С��������ò¤·¤ä¤¹ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
  • DB�����С��Υե����륪���С��ò¤·¤ä¤¹ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
  • MySQL �ǥ���饤��������ѹ������Ȥ����Ť������ư��륳�ͥ�����󤬻Ĥ�³���ʤ��褦�ˤ���

��³�Υ����ɥ���֤����¤���API���̤��ɲä��ʤ��ä��Τϡ�����Ū�ʴĶ��ˤ�������ǽ�ؤαƶ��ȡ� sql.DB �μ�����ʣ������ŷ��ˤ�������̤Ǥ���

�侩���� sql.DB ������

  • SetMaxOpenConns() ��ɬ�����ꤹ�롣��٤��⤯�ʤä�DB�α������٤��ʤä��Ȥ���������³���Ƥ���˥�������ꤲ�ʤ��褦�ˤ��뤿�ᡣ�Ǥ������ٻ�ò¤·¤Æºï¿½ï¿½ï¿½Î¥ï¿½ï¿½ë¡¼ï¿½×¥Ã¥È¤ï¿½È¯ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Â¤Î¥ï¿½ï¿½Í¥ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ê¤¹ï¿½ï¿½Î¤ï¿½ï¿½É¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ù»î¸³ï¿½ï¿½Ç¤ï¿½ï¿½Ê¤ï¿½ï¿½ï¿½ï¿½ï¿½ max_connection �䥳�������餢�������������ͤ�Ƚ�Ǥ���٤���
  • SetMaxIdleConns() �� SetMaxOpenConns() �ʾ�����ꤹ�롣�����ɥ����³�β����� SetConnMaxLifetime ��Ǥ���롣
  • SetConnMaxLifetime() �Ϻ�����³�� �� 1�� ���٤����ꤹ�롣¿���δĶ���1�ä�1����³�������٤���٤�����ˤʤ�ʤ���1���ְʾ�����ꤷ�������ϥ���ե顿�ͥåȥ�����󥸥˥��ˤ褯���̤��뤳�ȡ�

@methane
songofacandy at 19:35��Comments(0)��golang 

���ε����˥����Ȥ���

̾��:
URL:
  ����òµ­²ï¿½: ɾ��: ��    ��
 
 
 
Blog�⸡��
�ǿ�����
Archives
���Υ֥����ˤĤ���
DSAS�Ȥϡ�KLab �����ۤ����Ѥ��Ƥ��륳��ƥ�ĥ����ӥ��Ѥ�Linux�١����Υ���ե�Ǥ�������5����Υǡ������󥿤ˤƹ��ۤ������Ѥ��Ƥ��ޤ������桹��DSAS����Ȥ��䤹�����������ˡ������Ƥ����ϤDZ��ѤǤ��뤳�Ȥ��ܻؤ��ơ��������ɤ˶Ф���Ǥ��ޤ���
���Υ֥����Ǥϡ������ DSAS �ǻȤäƤ��뵻�ѤξҲ�䡢�¸����Ƥߤ���̤���𡢥ȥ�֥�˴������ޤ줿���ηи��̤ʤɡ���������������������򿥤�ޤ��ƾҲ𤷤Ƥ��������Ȼפ��ޤ���
�ǿ�������
<%==comments[n].author%>
<% } %>