Enviar búsqueda
Cargar
Database sql
•
5 recomendaciones
•
10,479 vistas
明
明 高橋
Seguir
There are some things to keep in mind about using golang's database / SQL library.
Leer menos
Leer más
Ingeniería
Denunciar
Compartir
Denunciar
Compartir
1 de 16
Descargar ahora
Descargar para leer sin conexión
Recomendados
Shibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch Db
Makoto Ohnami
図でわかるGit
図でわかるGit
Teloo
Inkernel disasm-from-intelsdm-kernelvm
Inkernel disasm-from-intelsdm-kernelvm
Masami Hiramatsu
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
Makoto Ohnami
Drupal 8 における TypeScript を使用する JavaScript 開発の現状
Drupal 8 における TypeScript を使用する JavaScript 開発の現状
tom_konda
Drupal 8.4.x の core にみるフロントエンド開発の現状紹介
Drupal 8.4.x の core にみるフロントエンド開発の現状紹介
tom_konda
Lisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
Plack::Request with Encoding
Plack::Request with Encoding
moznion
Recomendados
Shibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch Db
Makoto Ohnami
図でわかるGit
図でわかるGit
Teloo
Inkernel disasm-from-intelsdm-kernelvm
Inkernel disasm-from-intelsdm-kernelvm
Masami Hiramatsu
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
Makoto Ohnami
Drupal 8 における TypeScript を使用する JavaScript 開発の現状
Drupal 8 における TypeScript を使用する JavaScript 開発の現状
tom_konda
Drupal 8.4.x の core にみるフロントエンド開発の現状紹介
Drupal 8.4.x の core にみるフロントエンド開発の現状紹介
tom_konda
Lisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
Plack::Request with Encoding
Plack::Request with Encoding
moznion
Bat jscrpt powershell
Bat jscrpt powershell
Naoyuki Sano
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
nakamura001
カウチなやつら CouchDB in the room
カウチなやつら CouchDB in the room
Makoto Ohnami
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
Drawing Dataflow On Dalvik Bytecodes
Drawing Dataflow On Dalvik Bytecodes
Takahiro Yoshimura
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
Distributed processwithapex&flow lowcode
Distributed processwithapex&flow lowcode
furuCRM株式会社 CEO/Dreamforce Vietnam Founder
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Shinsuke Sugaya
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
Yuji Otani
フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係
明 高橋
TalknoteとGolang
TalknoteとGolang
leverages_event
Go言語でのステート管理
Go言語でのステート管理
明 高橋
Effective Modern C++ Item 7&8
Effective Modern C++ Item 7&8
明 高橋
Baremetal rust for_windows
Baremetal rust for_windows
明 高橋
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Yuji Otani
Introduction to Go programming
Introduction to Go programming
Exotel
FPGAを用いたシリアル入力型VGA映像出力装置の設計と実装
FPGAを用いたシリアル入力型VGA映像出力装置の設計と実装
Yusei Yamanaka
Reflectionのパフォーマンス
Reflectionのパフォーマンス
明 高橋
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
猫にはわからないGit講座
猫にはわからないGit講座
Yusei Yamanaka
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Corporation
Más contenido relacionado
La actualidad más candente
Bat jscrpt powershell
Bat jscrpt powershell
Naoyuki Sano
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
nakamura001
カウチなやつら CouchDB in the room
カウチなやつら CouchDB in the room
Makoto Ohnami
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
Drawing Dataflow On Dalvik Bytecodes
Drawing Dataflow On Dalvik Bytecodes
Takahiro Yoshimura
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
Distributed processwithapex&flow lowcode
Distributed processwithapex&flow lowcode
furuCRM株式会社 CEO/Dreamforce Vietnam Founder
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Shinsuke Sugaya
La actualidad más candente
(8)
Bat jscrpt powershell
Bat jscrpt powershell
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
カウチなやつら CouchDB in the room
カウチなやつら CouchDB in the room
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
Drawing Dataflow On Dalvik Bytecodes
Drawing Dataflow On Dalvik Bytecodes
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Distributed processwithapex&flow lowcode
Distributed processwithapex&flow lowcode
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
Destacado
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
Yuji Otani
フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係
明 高橋
TalknoteとGolang
TalknoteとGolang
leverages_event
Go言語でのステート管理
Go言語でのステート管理
明 高橋
Effective Modern C++ Item 7&8
Effective Modern C++ Item 7&8
明 高橋
Baremetal rust for_windows
Baremetal rust for_windows
明 高橋
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Yuji Otani
Introduction to Go programming
Introduction to Go programming
Exotel
FPGAを用いたシリアル入力型VGA映像出力装置の設計と実装
FPGAを用いたシリアル入力型VGA映像出力装置の設計と実装
Yusei Yamanaka
Reflectionのパフォーマンス
Reflectionのパフォーマンス
明 高橋
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
Yoshiki Shibukawa
猫にはわからないGit講座
猫にはわからないGit講座
Yusei Yamanaka
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Corporation
Destacado
(14)
【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
フォントとカーネル Vmのあやしい関係
フォントとカーネル Vmのあやしい関係
TalknoteとGolang
TalknoteとGolang
Go言語でのステート管理
Go言語でのステート管理
Effective Modern C++ Item 7&8
Effective Modern C++ Item 7&8
Baremetal rust for_windows
Baremetal rust for_windows
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Go言語のフレームワークRevelの紹介とサービスにおける活用事例
Introduction to Go programming
Introduction to Go programming
FPGAを用いたシリアル入力型VGA映像出力装置の設計と実装
FPGAを用いたシリアル入力型VGA映像出力装置の設計と実装
Reflectionのパフォーマンス
Reflectionのパフォーマンス
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
猫にはわからないGit講座
猫にはわからないGit講座
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法
Similar a Database sql
Web技術勉強会 第25回
Web技術勉強会 第25回
龍一 田中
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
MongoDB
MongoDB
あしたのオープンソース研究所
Mongo db勉強会
Mongo db勉強会
otmb
Azure Datalake 大全
Azure Datalake 大全
Daiyu Hatakeyama
MariaDB 10.3 概要
MariaDB 10.3 概要
GOTO Satoru
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
Tetsutaro Watanabe
Hachioji.pm11
Hachioji.pm11
Hon Dallica
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
Makoto Haruyama
社会ネットワーク分析第7回
社会ネットワーク分析第7回
Satoru Mikami
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
tripodworks
Dexiejs
Dexiejs
Ryota Suzuki
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for Hadoop
Takashi Kambayashi
Introducing Spider 20101206(DTT#7)
Introducing Spider 20101206(DTT#7)
Kentoku
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門 #oreilly0724
Cloudera Japan
Spider DeNA Technology Seminar #2
Spider DeNA Technology Seminar #2
Kentoku
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編
Shin Tanigawa
Inside of Asakusa DSL
Inside of Asakusa DSL
Suguru ARAKAWA
Level dbを試した
Level dbを試した
takayuki kochi
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
yut148atgmaildotcom
Similar a Database sql
(20)
Web技術勉強会 第25回
Web技術勉強会 第25回
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
MongoDB
MongoDB
Mongo db勉強会
Mongo db勉強会
Azure Datalake 大全
Azure Datalake 大全
MariaDB 10.3 概要
MariaDB 10.3 概要
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
Hachioji.pm11
Hachioji.pm11
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
社会ネットワーク分析第7回
社会ネットワーク分析第7回
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
Dexiejs
Dexiejs
Asakusa Enterprise Batch Processing Framework for Hadoop
Asakusa Enterprise Batch Processing Framework for Hadoop
Introducing Spider 20101206(DTT#7)
Introducing Spider 20101206(DTT#7)
オライリーセミナー Hive入門 #oreilly0724
オライリーセミナー Hive入門 #oreilly0724
Spider DeNA Technology Seminar #2
Spider DeNA Technology Seminar #2
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編
Inside of Asakusa DSL
Inside of Asakusa DSL
Level dbを試した
Level dbを試した
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
Database sql
1.
database/sqlとコネクション Talos208
2.
TL;DR database/sqlには意図した使用法がある database/sqlにはDBとの接続数を設定するAPIがいくつかある ライブラリのソースも読んでみよう
3.
WhoamI 株式会社スプラウトR&D TechLead 組込み→Windowsゲーム→SIer(Web系BtoB)→セキュリティと流 れてきたので、無駄に色々できる Twitter :
Talos208 GitHub: https://github.com/Talos208
4.
database/sql go標準のSQLライブラリ 使用法 db, err :=
sql.Open("driver name", "dsn") if err != nil { return nil, err } rows, err := db.Query(...) db.Close() ……ってしたくなりますよね?
5.
Db.Close()のドキュメント こんな記述が…… It is raretoCloseaDB
, as theDB handleis meant tobelong‑ livedandsharedbetweenmany goroutines. 訳) DBをCloseすることは、ほとんどない。なぜなら、DBハンドルは長期間 生存して複数のgoroutine間で共有することを意図しているから。
6.
ソースも見てみよう type DB struct
{ driver driver.Driver dsn string numClosed uint64 mu sync.Mutex freeConn []*driverConn connRequests []chan connRequest numOpen int // (後略) }
7.
ソースも見てみよう(2) func (db *DB)
conn(strategy connReuseStrategy) (*driverConn, error) { // (略) numFree := len(db.freeConn) if strategy == cachedOrNewConn && numFree > 0 { conn := db.freeConn[0] copy(db.freeConn, db.freeConn[1:]) db.freeConn = db.freeConn[:numFree-1] conn.inUse = true // (略) return conn, nil // freeConnの先頭を再利用 } // (略) db.numOpen++ // optimistically db.mu.Unlock() ci, err := db.driver.Open(db.dsn) // ここでOpen // (略) }
8.
ソースも見てみよう(3) func (db *DB)
Close() error { // (略) var err error fns := make([]func() error, 0, len(db.freeConn)) for _, dc := range db.freeConn { fns = append(fns, dc.closeDBLocked()) } db.freeConn = nil // (略) for _, fn := range fns { err1 := fn() if err1 != nil { err = err1 } } return err }
9.
ソースから読み取れたこと sql.Open() で返ってくるDB構造体は、コネクションプールを持 っている 接続をするときには、まずプールの空きコネクションを使用する DB.Exec() / DB.Query() などから自動的に DB.conn() が呼 ばれる。あれば空きコネクションが利用され、無ければ新規コ ネクションが取得される DB.Close() は、全ての空きコネクションを切断する
10.
つまり 都度Open()/Close()すると、その度にコネクション接続/切断のコス トがかかる DBへのログインのコストもかかる 並行して複数のDB構造体を持つと、余計なメモリを消費する これを避けるために sql.Open() は起動時に1回だけ呼ぶ DB.Close() は最後に1回呼ぶ
11.
接続数の制限 func(*DB) SetMaxIdleConns func (db
*DB) SetMaxIdleConns(n int) 空きコネクションの最大数を指定。0だとコネクションプーリング を行わない func(*DB) SetMaxOpenConns func (db *DB) SetMaxOpenConns(n int) (空きも含めた)全コネクションの最大数。0だと上限なし 最大値しか設定できない。しばらく経つと、最大数に張り付いたままに なる
12.
What happen? 症状 sql.Open()は出来る DB.Ping()も成功する DB.Query()を実行するとコネクションエラー ????
13.
Condition サーバとDBとの間に、MariDB Maxscaleを使用していた Maxscale MySQL(MariaDB)向けのL7ロードバランサ クエリ内容を見て SELECT はリードレプリカに、 UPDATE はマ スターにとか出来る
14.
Cause 1. サーバ<‑> Maxscaleのコネクションは存在 Maxscaleとはつながるので、DB.Ping()は成功 2.
Maxscale<‑> MySQLの接続がタイムアウトしていた サーバにタイムアウトが通知されない 3. クエリ発行時にコネクションエラー じつはMaxscaleがエラーを出していた
15.
SetConnMaxLifetime() Go1.6から新しいAPIが導入された func(*DB) SetConnMaxLifetime func (db
*DB) SetConnMaxLifetime(d time.Duration) 一定時間以上経った接続は再利用しない これを使うだけのためにGo1.4‑>Go1.6に移行
16.
解決 1. SetConnMaxLifetime() の設定により、サーバ<‑> Maxscale間 のコネクションのほうが先に切れる 2.
DB.Ping()の時点で、コネクションが再接続される 3. 正常にクエリ発行
Descargar ahora