Mysql: ์—ฌ๋Ÿฌ ๋™์‹œ ๊ณ ๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•  ๋•Œ "dial tcp 127.0.0.1:3306: ์—ฐ๊ฒฐ: ์š”์ฒญ๋œ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 01์›” 17์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: go-sql-driver/mysql

๋ฌธ์ œ ์„ค๋ช…

์—ฌ๋Ÿฌ ๋™์‹œ goroutines๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ผ๋งˆ ํ›„ "dial tcp 127.0.0.1:3306: connect: cannot assign requested address"๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

  • 8๊ฐœ์˜ ๋™์‹œ ๊ณ ๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•  ๋•Œ => ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.
  • ์•ฝ 15์ดˆ ํ›„์— ๋” ๋งŽ์€ goroutines =>์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ชจ๋“  ์š”์ฒญ์€ err="dial tcp 127.0.0.1:3306: connect: cannot assign requested address"์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‹คํŒจ ์ „์— ์•ฝ 35,000๊ฐœ์˜ ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SQL ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ƒˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ํฌํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๋ฉด ํ’€์—์„œ ๊ธฐ์กด ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ DBStats๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
(sql.DBStats) {
MaxOpenConnections: (int) 0,
OpenConnections: (int) 64,
์‚ฌ์šฉ ์ค‘: (int) 64,
์œ ํœด: (int) 0,
๋Œ€๊ธฐ ํšŸ์ˆ˜: (int64) 0,
WaitDuration: (time.Duration) 0์ดˆ,
MaxIdleClosed: (int64) 28252,
MaxLifetimeClosed: (int64) 0
}

go-sql-driver V1.4.1์„ go 1.11.2์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋˜๋Š” MariaDB์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜์˜ ์˜ˆ์—์„œ๋Š” ์œ ์‚ฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก "ํŒจ๋‹‰"์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ ์ฝ”๋“œ

// the below code is called repetitly from a configurable number of worker fed using channels (fan-out)
// Mark visa_card entry as migrated
        query := fmt.Sprintf(UPDATE visa_card SET migrated=TRUE WHERE id_card=%s, this.idCard)
        _, err = conf.MySql.ExecContext(ctx, query)
        if err != nil {
            log.Error(ctx, log.EventTypeBusiness, "", err)
            spew.Dump(conf.MySql.Stats())
            panic("the END")
        }
        return err

์˜ค๋ฅ˜ ๊ธฐ๋ก

{"level":"info","dateTime":"2019-01-17T14:58:04.095+0100","msg":"","appVersion":"0.0.0","component":"VISA-MIGRATOR","country":"bw","eventType":"incoming request","requestId":"d25e58f8-8228-4a7f-9cc4-1fd9ea2230b4","useCase":"","parameters":{"request_headers":{},"request_http_method":"POST","request_uri":"/startImportActiveCards"},"caller":"common/utils/log/ginLog.go:70"}
{"level":"error","dateTime":"2019-01-17T14:58:20.562+0100","msg":"","appVersion":"0.0.0","component":"VISA-MIGRATOR","country":"bw","eventType":"internal","requestId":"d25e58f8-8228-4a7f-9cc4-1fd9ea2230b4","useCase":"startMigration","peer":"internal","caller":"migrator/migrate/migrateActiveCards.go:211","errorDetails":"dial tcp 127.0.0.1:3306: connect: cannot assign requested address"}
(sql.DBStats) {
 MaxOpenConnections: (int) 0,
 OpenConnections: (int) 50,
 InUse: (int) 50,
 Idle: (int) 0,
 WaitCount: (int64) 0,
 WaitDuration: (time.Duration) 0s,
 MaxIdleClosed: (int64) 28258,
 MaxLifetimeClosed: (int64) 0
}
panic: the END

๊ตฌ์„ฑ

*go-sql-driver V1.4.1

*์ด๋™ ๋ฒ„์ „: go1.11.2 linux/amd64 ๋ฒ„์ „์œผ๋กœ ์ด๋™

*๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ MariaDB 10.4.1

์„œ๋ฒ„ OS: ์˜ˆ: Debian 8.1(Jessie), Windows 10

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ์‹œ๋„.

db.SetMaxIdleConns(64)
db.SetMaxOpenConns(64)
db.SetConnMaxLifetime(์‹œ๊ฐ„.๋ฏธ์†Œ)

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด ์‹œ๋„.

db.SetMaxIdleConns(64)
db.SetMaxOpenConns(64)
db.SetConnMaxLifetime(์‹œ๊ฐ„.๋ฏธ์†Œ)

๋งค์šฐ ๋น ๋ฅธ ์‘๋‹ต์— ๋Œ€ํ•ด @methane ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ‰๊ฐ€ํŒ์€ ์„ฑ๊ณต์ ์ž…๋‹ˆ๋‹ค!
๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์— ์•ฝ๊ฐ„ ๋†€๋ž๊ณ  ๊ทธ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋‹น์‹ ์€ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
http://techblog.en.klab-blogs.com/archives/31093990.html

๊ธฐ์‚ฌ์˜ ๋ชจ๋“  ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ธฐ์‚ฌ์˜ ์ผ๋ณธ์–ด ๋ฒ„์ „์—์„œ ์‚ด์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

http://dsas.blog.klab.org/archives/2018-02/configure-sql-db.html

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰