cari
Rumahpangkalan datatutorial mysqlBagaimana untuk menetapkan bilangan maksimum sambungan dan bilangan maksimum sambungan terbiar dalam golang digabungkan dengan mysql

Bilangan maksimum sambungan dan bilangan maksimum sambungan melahu ditakrifkan dalam pangkalan data/sql dalam pustaka standard golang.

Pakej pemacu SQL yang digunakan dalam contoh untuk menyambung ke MySQL ialah github.com/go-sql-driver/mysql.

Antara muka untuk menetapkan bilangan maksimum sambungan ialah

func (db *DB) SetMaxOpenConns(n int)

Tetapkan sambungan Bilangan maksimum sambungan yang boleh dibuka oleh MySQL.

Jika n

Lalainya ialah 0, yang bermaksud tiada had pada bilangan sambungan.

Parameter lain yang berkaitan dengan bilangan sambungan ialah MaxIdleConns, yang mewakili bilangan maksimum sambungan melahu.

Jika MaxIdleConns lebih besar daripada 0 dan lebih besar daripada MaxOpenConns, maka MaxIdleConns akan dilaraskan untuk sama dengan MaxOpenConns dan lebihan sambungan akan ditutup apabila terdapat lebihan sambungan.

Antara muka untuk menetapkan bilangan maksimum sambungan melahu ialah:

func (db *DB) SetMaxIdleConns(n int)

Apabila n

Bilangan maksimum lalai sambungan melahu ialah 2:
const defaultMaxIdleConns = 2

Mengenai hubungan antara sambungan terbuka dan sambungan melahu, sila tambah:

Sambungan terbuka = ​​sambungan sedang digunakan (tidak digunakan) + sambungan dalam keadaan melahu (melahu)

Ujian berikut dan sahkan bilangan maksimum sambungan dan bilangan maksimum sambungan terbiar.

1. Ujian bilangan maksimum sambungan

Mula-mula tetapkan bilangan maksimum sambungan terbuka kepada 1, kemudian buka 20 goroutine, setiap goroutine melaksanakan pernyataan sql dan mencetak id sambungan sambungan digunakan untuk melaksanakan sql . Perhatikan pelaksanaan Goroutine lain yang perlu melaksanakan SQL apabila melaksanakan penyataan SQL yang memakan masa yang menduduki sambungan.

Kod contoh adalah seperti berikut:

package main

import (
        "database/sql"
        "log"

        _ "github.com/go-sql-driver/mysql"
)

var DB *sql.DB
var dataBase = "root:Aa123456@tcp(127.0.0.1:3306)/?loc=Local&parseTime=true"

func Init() {
        var err error
        DB, err = sql.Open("mysql", dataBase)
        if err != nil {
                log.Fatalln("open db fail:", err)
        }

        DB.SetMaxOpenConns(1)

        err = DB.Ping()
        if err != nil {
                log.Fatalln("ping db fail:", err)
        }
}

func main() {
        Init()
        
        //开启20个goroutine
        for i:=0; i < 20; i++ {
                go one_worker(i)
        }
        
        select {
        }

}

func one_worker(i int) {
        var connection_id int
        err := DB.QueryRow("select CONNECTION_ID()").Scan(&connection_id)
        if err != nil {
                log.Println("query connection id failed:", err)
                return
        }

        log.Println("worker:", i, ", connection id:", connection_id)

        var result int
        err = DB.QueryRow("select sleep(10)").Scan(&result)
        if err != nil {
                log.Println("query sleep connection id faild:", err)
                return
        }

}

output

2019/10/02 18:14:25 pekerja: 2 , id sambungan: 55
2019/ 10/02 18:14:25 pekerja: 17 , id sambungan: 55
2019/10/02 18:14:25 pekerja: 11 , id sambungan: 55
2019/10/02 18: 14:35 pekerja: 3 , id sambungan: 55
2019/10/02 18:14:45 pekerja: 0 , id sambungan: 55
2019/10/02 18:14:45 pekerja: 4 , sambungan id: 55
2019/10/02 18:14:45 pekerja: 5 , id sambungan: 55
2019/10/02 18:15:05 pekerja: 7 , id sambungan: 55
2019/ 10/02 18:15:25 pekerja: 15, id sambungan: 55
2019/10/02 18:15:25 pekerja: 6, id sambungan: 55
2019/10/02 18:15:35 pekerja: 13 , id sambungan: 55
2019/10/02 18:15:45 pekerja: 19 , id sambungan: 55
2019/10/02 18:15:45 pekerja: 10 , id sambungan: 55
2019/10/02 18:15:45 pekerja: 12 , id sambungan: 55
2019/10/02 18:15:55 pekerja: 14 , id sambungan: 55
2019/10/02 18:16:15 pekerja: 8 , id sambungan: 55
2019/10/02 18:16:35 pekerja: 18 , id sambungan: 55
2019/10/02 18:16:35 pekerja: 1 , id sambungan : 55
2019/10/02 18:17:05 pekerja: 16 , id sambungan: 55
2019/10/02 18:17:35 pekerja: 9 , id sambungan: 55

Gunakan senarai proses untuk melihat sambungan

mysql> show processlist;
+----+------+-----------------+------+---------+------+------------+------------------+
| Id | User | Host            | db   | Command | Time | State      | Info             |
+----+------+-----------------+------+---------+------+------------+------------------+
| 20 | root | localhost       | NULL | Query   |    0 | starting   | show processlist |
| 55 | root | localhost:59518 | NULL | Query   |    5 | User sleep | select sleep(10) |
+----+------+-----------------+------+---------+------+------------+------------------+
2 rows in set (0.00 sec)

Gunakan netstat untuk melihat sambungan

netstat -an | grep 3306
tcp4       0      0  127.0.0.1.3306         127.0.0.1.59518        ESTABLISHED
tcp4       0      0  127.0.0.1.59518        127.0.0.1.3306         ESTABLISHED
tcp46      0      0  *.3306                 *.*                    LISTEN

Seperti yang anda boleh lihat daripada keputusan, 20 goroutine bergilir-gilir menggunakan sambungan yang sama ( id sambungan ialah 55) untuk melaksanakan pernyataan sql.

Groutine lain akan memasuki keadaan menyekat apabila sambungan telah diduduki. Tiada goroutine lain boleh menggunakan sambungan sehingga sambungan habis.

Walaupun berbilang gorout sedang melaksanakan SQL, berbilang sambungan tidak dibuat.

Oleh itu, bilangan maksimum tetapan sambungan berkuat kuasa.

Sesetengah pembaca mungkin bertanya, jika anda belum melihat bilangan maksimum sambungan melahu yang ditetapkan, apakah bilangan maksimum sambungan ruang pada masa ini?

Seperti yang dinyatakan sebelum ini, bilangan maksimum lalai sambungan melahu ialah 2.

Mari kita uji bilangan maksimum sambungan ruang.

2. Bilangan maksimum ujian sambungan melahu

Dalam contoh berikut, tetapkan bilangan maksimum sambungan kepada 1 dan bilangan maksimum sambungan melahu kepada 0.

Dan laksanakan SQL setiap 3 saat pernyataan.

Kod adalah seperti berikut:

package main

import (
        "database/sql"
        "log"
        "time"

        _ "github.com/go-sql-driver/mysql"

)

var DB *sql.DB
var dataBase = "root:Aa123456@tcp(127.0.0.1:3306)/?loc=Local&parseTime=true"

func mysqlInit() {
        var err error
        DB, err = sql.Open("mysql", dataBase)
        if err != nil {
                log.Fatalln("open db fail:", err)
        }

        DB.SetMaxOpenConns(1)
        DB.SetMaxIdleConns(0)

        err = DB.Ping()
        if err != nil {
                log.Fatalln("ping db fail:", err)
        }
}

func main() {
        mysqlInit()

        for {
                execSql()
                time.Sleep(3*time.Second)
        }
}


func execSql() {
        var connection_id int
        err := DB.QueryRow("select CONNECTION_ID()").Scan(&connection_id)
        if err != nil {
                log.Println("query connection id failed:", err)
                return
        }

        log.Println("connection id:", connection_id)
}

output:

2019/10/13 23:06:00 id sambungan: 26
2019/10 /13 23 :06:03 id sambungan: 27
2019/10/13 23:06:06 id sambungan: 28
2019/10/13 23:06:09 id sambungan: 29
2019/ 10/13 23:06:12 id sambungan: 30
2019/10/13 23:06:15 id sambungan: 31
2019/10/13 23:06:18 id sambungan: 32
2019 /10/ 13 23:06:21 id sambungan: 33
2019/10/13 23:06:24 id sambungan: 34
2019/10/13 23:06:27 id sambungan: 35
2019/10 /13 23:06:30 id sambungan: 36
2019/10/13 23:06:33 id sambungan: 37
2019/10/13 23:06:36 id sambungan: 38

Seperti yang dapat dilihat daripada keputusan, id sambungan yang digunakan adalah berbeza setiap kali SQL dilaksanakan.

Tetapkan bilangan maksimum sambungan melahu kepada 0. Selepas setiap pelaksanaan SQL, sambungan tidak akan dimasukkan ke dalam kumpulan sambungan melahu, tetapi akan ditutup pada kali berikutnya SQL dilaksanakan, sambungan baharu akan diwujudkan semula.

Atas ialah kandungan terperinci Bagaimana untuk menetapkan bilangan maksimum sambungan dan bilangan maksimum sambungan terbiar dalam golang digabungkan dengan mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Bilakah anda harus menggunakan indeks komposit berbanding indeks lajur tunggal?Bilakah anda harus menggunakan indeks komposit berbanding indeks lajur tunggal?Apr 11, 2025 am 12:06 AM

Dalam pengoptimuman pangkalan data, strategi pengindeksan hendaklah dipilih mengikut keperluan pertanyaan: 1. Apabila pertanyaan melibatkan pelbagai lajur dan urutan syarat ditetapkan, gunakan indeks komposit; 2. Apabila pertanyaan melibatkan pelbagai lajur tetapi urutan syarat tidak ditetapkan, gunakan pelbagai indeks lajur tunggal. Indeks komposit sesuai untuk mengoptimumkan pertanyaan berbilang lajur, manakala indeks lajur tunggal sesuai untuk pertanyaan tunggal lajur.

Bagaimana untuk mengenal pasti dan mengoptimumkan pertanyaan perlahan di MySQL? (Log pertanyaan perlahan, prestasi_schema)Bagaimana untuk mengenal pasti dan mengoptimumkan pertanyaan perlahan di MySQL? (Log pertanyaan perlahan, prestasi_schema)Apr 10, 2025 am 09:36 AM

Untuk mengoptimumkan pertanyaan perlahan MySQL, SlowQuerylog dan Performance_Schema perlu digunakan: 1. Dayakan SlowQueryLog dan tetapkan ambang untuk merakam pertanyaan perlahan; 2. Gunakan Performance_Schema untuk menganalisis butiran pelaksanaan pertanyaan, cari kesesakan prestasi dan mengoptimumkan.

MySQL dan SQL: Kemahiran Penting untuk PemajuMySQL dan SQL: Kemahiran Penting untuk PemajuApr 10, 2025 am 09:30 AM

MySQL dan SQL adalah kemahiran penting untuk pemaju. 1.MYSQL adalah sistem pengurusan pangkalan data sumber terbuka, dan SQL adalah bahasa standard yang digunakan untuk mengurus dan mengendalikan pangkalan data. 2.MYSQL menyokong pelbagai enjin penyimpanan melalui penyimpanan data yang cekap dan fungsi pengambilan semula, dan SQL melengkapkan operasi data yang kompleks melalui pernyataan mudah. 3. Contoh penggunaan termasuk pertanyaan asas dan pertanyaan lanjutan, seperti penapisan dan penyortiran mengikut keadaan. 4. Kesilapan umum termasuk kesilapan sintaks dan isu -isu prestasi, yang boleh dioptimumkan dengan memeriksa penyataan SQL dan menggunakan perintah menjelaskan. 5. Teknik pengoptimuman prestasi termasuk menggunakan indeks, mengelakkan pengimbasan jadual penuh, mengoptimumkan operasi menyertai dan meningkatkan kebolehbacaan kod.

Huraikan proses replikasi master-hamba MySQL.Huraikan proses replikasi master-hamba MySQL.Apr 10, 2025 am 09:30 AM

MySQL Asynchronous Master-Slave Replikasi membolehkan penyegerakan data melalui binlog, meningkatkan prestasi baca dan ketersediaan yang tinggi. 1) Rekod pelayan induk berubah kepada binlog; 2) Pelayan hamba membaca binlog melalui benang I/O; 3) Server SQL Thread menggunakan binlog untuk menyegerakkan data.

Mysql: Konsep mudah untuk pembelajaran mudahMysql: Konsep mudah untuk pembelajaran mudahApr 10, 2025 am 09:29 AM

MySQL adalah sistem pengurusan pangkalan data sumber terbuka. 1) Buat Pangkalan Data dan Jadual: Gunakan perintah Createdatabase dan Createtable. 2) Operasi Asas: Masukkan, Kemas kini, Padam dan Pilih. 3) Operasi lanjutan: Sertai, subquery dan pemprosesan transaksi. 4) Kemahiran Debugging: Semak sintaks, jenis data dan keizinan. 5) Cadangan Pengoptimuman: Gunakan indeks, elakkan pilih* dan gunakan transaksi.

MySQL: Pengenalan mesra pengguna ke pangkalan dataMySQL: Pengenalan mesra pengguna ke pangkalan dataApr 10, 2025 am 09:27 AM

Pemasangan dan operasi asas MySQL termasuk: 1. Muat turun dan pasang MySQL, tetapkan kata laluan pengguna root; 2. Gunakan arahan SQL untuk membuat pangkalan data dan jadual, seperti CreateTatabase dan Createtable; 3. Melaksanakan operasi CRUD, gunakan memasukkan, pilih, kemas kini, padamkan arahan; 4. Buat indeks dan prosedur tersimpan untuk mengoptimumkan prestasi dan melaksanakan logik kompleks. Dengan langkah -langkah ini, anda boleh membina dan mengurus pangkalan data MySQL dari awal.

Bagaimanakah kolam penampan InnoDB berfungsi dan mengapa penting untuk prestasi?Bagaimanakah kolam penampan InnoDB berfungsi dan mengapa penting untuk prestasi?Apr 09, 2025 am 12:12 AM

Innodbbufferpool meningkatkan prestasi pangkalan data MySQL dengan memuatkan data dan halaman indeks ke dalam ingatan. 1) Halaman data dimuatkan ke dalam bufferpool untuk mengurangkan cakera I/O. 2) Halaman kotor ditandakan dan disegarkan ke cakera secara teratur. 3) Pengurusan Data Pengurusan Algoritma LRU Penghapusan. 4) Mekanisme pembacaan memuatkan halaman data yang mungkin terlebih dahulu.

MySQL: Kemudahan Pengurusan Data untuk PemulaMySQL: Kemudahan Pengurusan Data untuk PemulaApr 09, 2025 am 12:07 AM

MySQL sesuai untuk pemula kerana mudah dipasang, kuat dan mudah untuk menguruskan data. 1. Pemasangan dan konfigurasi mudah, sesuai untuk pelbagai sistem operasi. 2. Menyokong operasi asas seperti membuat pangkalan data dan jadual, memasukkan, menanyakan, mengemas kini dan memadam data. 3. Menyediakan fungsi lanjutan seperti menyertai operasi dan subqueries. 4. Prestasi boleh ditingkatkan melalui pengindeksan, pengoptimuman pertanyaan dan pembahagian jadual. 5. Sokongan sokongan, pemulihan dan langkah keselamatan untuk memastikan keselamatan data dan konsistensi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual