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) ��ư�����٤Ƥߤޤ��礦������󥸤���������³�����Ĥ����ϻ��������³�����Ф�������³�����Ѳ�ǽ�ˤʤ�Τ��ԤäƤ�����֤κ����ͤ�ߥ��ä�ɽ���Ƥ��ޤ���
1000��Υ������¹Ԥ���Τˡ� MaxIdleConns(4) ���� 285 ����³���Ƥ��ޤ����� MaxIdleConns(10) ���Ȥ���� 69 ��ޤǸ��餹���Ȥ��Ǥ��Ƥ��ޤ��������ǡ���٤��ߤޤä���⤺�äȰݻ���³������³�������Ƥ��ޤäƤ��ޤ���
���٤� SetMaxIdleConns(100); SetConnMaxLifetime(time.MilliSecond * 300)
�Υ��ߥ�졼������̤򸫤Ƥ���������
20x4=80 �����³�򤷤Ƥ��ޤ��� MaxIdleConns(10) �ΤȤ��� 69 �����¿���Ǥ����������ư���狼��䤹�����뤿��� lifetime ��û�����ꤷ�Ƥ��뤿��Ǥ������ߥ�졼�������֤�100�ä˿��Ф����顢MaxIdleConns(10) �ξ��Ǥ���³����Ϥ��褽 690 ��ˤʤꡢ SetConnMaxLifetime(time.Second * 30) �ξ�����³����� 80 ��ˤʤ�Ǥ��礦��
���Υ���դǡ�����³������Υ����ߥ󥰤˽��椷�����Υ����ߥ󥰤ǥ쥤�ƥ󥷤����ӤƤ��ޤäƤ���Τ����ˤʤ뤫�⤷��ޤ��󡣤���ϥ��ߥ�졼����󤬴����˰���ʬ�ۤˤʤäƤ��ơ��ǽ�����Ƥ���³���ۤ�Ʊ���˺���Ƥ��ޤäƤ��뤫��Ǥ������֤ˤ�ä���٤���ư���륢�ץꥱ�������Ǥϡ���³������륿���ߥ󥰤���ä�ʬ������Τǡ����Υ��ѥ�����ȯ�����ˤ����Ϥ��Ǥ������Υ���դϡ�200ms�������ʳ�Ū����٤���������ˡ���Υ���դ�Ʊ��1000ms����٤������ä��Ȥ��Τ�ΤǤ���
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