[MySQL]Innodb参数优化_MySQL
innodb_buffer_pool_size
innodb_buffer_pool_size 参数用来设置Innodb 最主要的Buffer(Innodb_Buffer_Pool)的大小,也就是缓存用户表及索引数据的最主要缓存空间,对Innodb 整体性能影响也最大。
对于一台单独给MySQL 使用的主机,并假设只使用innodb引擎,一般建议该参数为物流内存的75%左右。
当系统上线之后,我们可以通过Innodb 存储引擎提供给我们的关于Buffer Pool 的实时状态信息作出进一步分析,来确定系统中Innodb 的Buffer Pool 使用情况是否正常高效:
mysql> show status like 'Innodb_buffer_pool_%'; +-----------------------------------------+---------------+ | Variable_name | Value | +-----------------------------------------+---------------+ | Innodb_buffer_pool_pages_data | 999020 | | Innodb_buffer_pool_pages_dirty | 47643 | | Innodb_buffer_pool_pages_flushed | 474668167 | | Innodb_buffer_pool_pages_LRU_flushed | 365125 | | Innodb_buffer_pool_pages_free | 0 | | Innodb_buffer_pool_pages_made_not_young | 0 | | Innodb_buffer_pool_pages_made_young | 203410903 | | Innodb_buffer_pool_pages_misc | 49552 | | Innodb_buffer_pool_pages_old | 368697 | | Innodb_buffer_pool_pages_total | 1048572 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 66348855 | | Innodb_buffer_pool_read_ahead_evicted | 3716819 | | Innodb_buffer_pool_read_requests | 3215992991498 | | Innodb_buffer_pool_reads | 65634998 | | Innodb_buffer_pool_wait_free | 651 | | Innodb_buffer_pool_write_requests | 21900970785 | +-----------------------------------------+---------------+
read 请求3215992991498次,其中有65634998次所请求的数据在buffer pool 中没有,也就是说有65634998 次是通过读取物理磁盘来读取数据的,所以很容易也就得出了Innodb Buffer Pool 的Read 命中率大概在为:(3215992991498- 65634998)/ 3215992991498* 100% = 99.998%。
innodb_buffer_pool_instances
该参数将innodb_buffer_pool划分为不同的instance,每个instance独立的LRU、FLUSH、FREE、独立的mutex控制。
对于比较大的innodb_buffer_pool_size,建议设置多个instances,避免内存锁的争用。
innodb_log_file_size
设置innodb redo log file的大小,从性能角度来看,日志文件越大越好,可以减少buffer pool checkpoint的频率,但是在MySQL的官方版本中,innodb_log_files_in_group*innodb_log_files_in_group不能超过4G。
日志文件越大,也意味着MySQL实例crash之后恢复的时间越长,不过一般生成系统都会配置主从库,因此这个因素可以忽略不考虑。
一般来说,在我个人维护的环境中,比较偏向于将事务日志设置为3 组,每个日志设置为256MB 大小,整体效果还算不错。
innodb_log_buffer_size
顾名思义,这个参数就是用来设置Innodb 的Log Buffer 大小的,系统默认值为1MB。Log Buffer的主要作用就是缓冲Log 数据,提高写Log 的IO 性能。一般来说,如果你的系统不是“写负载非常高且以大事务居多”的话,8MB 以内的大小就完全足够了。
我们也可以通过系统状态参数提供的性能统计数据来分析Log 的使用情况:
mysql> show status like 'innodb_log%'; +---------------------------+------------+ | Variable_name | Value | +---------------------------+------------+ | Innodb_log_waits | 0 | | Innodb_log_write_requests | 3486920147 | | Innodb_log_writes | 352577360 | +---------------------------+------------+
innodb_thread_concurrency
该参数表示innodb最大线程并发量,官方推荐设为0,表示由innodb自己控制,但实践证明,当并发过大时,innodb自己会控制不当,可能导致MySQL hang死,所以一般建议为CPU核心数(不含超线程)
innodb_io_capacity
表示每秒钟IO设备处理数据页的上限,如果硬盘性能比较好,可以设大一些(如1000)。
innodb_max_dirty_pages_pct
表示innodb从buffer中刷新脏页的比例不超过这个值,每次checkpoint的脏页刷新为:innodb_max_dirty_pages_pct*innodb_io_capacity
Innodb_flush_method
用来设置Innodb 打开和同步数据文件以及日志文件的方式,不过只有在Linux & Unix 系统上面有效。当我们设置为O_DSYNC,则系统以O_SYNC 方式打开和刷新日志文件, 通过fsync() 来打开和刷新数据文件。而设置为O_DIRECT 的时候, 则通过O_DIRECT(Solaris 上为directio())打开数据文件,同时以fsync()来刷新数据和日志文件。
总的来说,innodb_flush_method 的不同设置主要影响的是Innodb 在不同运行平台下进行IO 操作的时候所调用的操作系统IO 借口的区别。而不同的IO 操作接口对数据的处理方式会有一定的区别,所以处理性能也会有一定的差异。一般来说,如果我们的磁盘是通过RAID 卡做了硬件级别的RAID,建议可以使用O_DIRECT,可以一定程度上提高IO 性能,但如果RAID Cache 不够的话,还是需要谨慎对待。
innodb_file_per_table
一般建议开启,因为不同的表空间可以灵活设置数据目录的地址,避免共享表空间产生的IO竞争。
innodb_flush_log_at_trx_commit
innodb_flush_log_at_trx_commit = 0,Innodb 中的Log Thread 每隔1 秒钟会将log buffer中的数据写入到文件,同时还会通知文件系统进行文件同步的flush 操作,保证数据确实已经写入到磁盘上面的物理文件。但是,每次事务的结束(commit 或者是rollback)并不会触发Log Thread 将log buffer 中的数据写入文件。所以,当设置为0 的时候,当MySQL Crash 和OS Crash 或者主机断电之后,最极端的情况是丢失1 秒时间的数据变更。innodb_flush_log_at_trx_commit = 1,这也是Innodb 的默认设置。我们每次事务的结束都会触发Log Thread 将log buffer 中的数据写入文件并通知文件系统同步文件。这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash 或者是主机断电都不会丢失任何已经提交的数据。
innodb_flush_log_at_trx_commit = 2,当我们设置为2 的时候,Log Thread 会在我们每次事务结束的时候将数据写入事务日志,但是这里的写入仅仅是调用了文件系统的文件写入操作。而我们的文件系统都是有缓存机制的,所以Log Thread 的这个写入并不能保证内容真的已经写入到物理磁盘上面完成持久化的动作。文件系统什么时候会将缓存中的这个数据同步到物理磁盘文件Log Thread 就完全不知道了。所以,当设置为2 的时候,MySQL Crash 并不会造成数据的丢失,但是OS Crash 或者是主机断电后可能丢失的数据量就完全控制在文件系统上了。
从上面的分析我们可以看出,当innodb_flush_log_at_trx_commit 设置为1 的时候是最安全的,但是由于所做的IO 同步操作也最多,所以性能也是三种设置中最差的一种。如果设置为0,则每秒有一次同步,性能相对高一些。如果设置为2,可能性能是三这种最好的。但是也可能是出现Crash后丢失数据最多的。到底该如何设置设置,就要根据具体的场景来分析了。一般来说,如果完全不能接受数据的丢失,那么我们肯定会通过牺牲一定的性能来换取数据的安全性,选择设置为1。而如果我们可以丢失很少量的数据(比如说1 秒之内),那么我们可以设置为0。当然,如果大家觉得我们的OS 足够稳定,主机硬件设备,而且主机的供电系统也足够安全,我们也可以将innodb_flush_log_at_trx_commit 设置为2 让系统的整体性能尽可能的高。
transaction-isolation
对于高并发应用来说,为了尽可能保证数据的一致性,避免并发可能带来的数据不一致问题,自然是事务隔离级别越高越好。但是,对于Innodb 来说,所使用的事务隔离级别越高,实现复杂度自然就会更高,所需要做的事情也会更多,整体性能也就会更差。
所以,我们需要分析自己应用系统的逻辑,选择可以接受的最低事务隔离级别。以在保证数据安全一致性的同时达到最高的性能。
虽然Innodb 存储引擎默认的事务隔离级别是REPEATABLE READ,但实际上在我们大部分的应用场景下,都只需要READ COMMITED 的事务隔离级别就可以满足需求了。
sync_binlog
表示每次刷新binlog到磁盘的数目。
对于核心系统,我们需要采用双1模式,即:innodb_flush_log_at_trx_commit=1, sync_binlog=1,这样可以保证主备库数据一致,不会有数据丢失。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Ciri baharu versi PHP5.4: Cara menggunakan parameter pembayang jenis boleh panggil untuk menerima fungsi atau kaedah boleh panggil Pengenalan: Versi PHP5.4 memperkenalkan ciri baharu yang sangat mudah - anda boleh menggunakan parameter pembayang jenis boleh panggil untuk menerima fungsi atau kaedah boleh panggil . Ciri baharu ini membenarkan fungsi dan kaedah untuk menentukan secara langsung parameter boleh panggil yang sepadan tanpa semakan dan penukaran tambahan. Dalam artikel ini, kami akan memperkenalkan penggunaan pembayang jenis boleh panggil dan memberikan beberapa contoh kod,

Parameter produk merujuk kepada maksud atribut produk. Sebagai contoh, parameter pakaian termasuk jenama, bahan, model, saiz, gaya, fabrik, kumpulan yang berkenaan, warna, dsb. parameter makanan termasuk jenama, berat, bahan, nombor lesen kesihatan, parameter perkakas rumah yang berkenaan; termasuk jenama, saiz, warna, tempat asal, voltan yang berkenaan, isyarat, antara muka dan kuasa, dsb.

Pemeriksaan keselamatan jenis parameter C++ memastikan bahawa fungsi hanya menerima nilai jenis yang dijangkakan melalui semakan masa kompilasi, semakan masa jalan dan penegasan statik, menghalang tingkah laku yang tidak dijangka dan ranap program: Pemeriksaan jenis masa kompilasi: Pengkompil menyemak keserasian jenis. Semakan jenis masa jalan: Gunakan dynamic_cast untuk menyemak keserasian jenis dan buang pengecualian jika tiada padanan. Penegasan statik: Tegaskan keadaan jenis pada masa penyusunan.

Semasa proses pembangunan, kami mungkin menghadapi mesej ralat sedemikian: PHPWarning: in_array()expectsparameter. Mesej ralat ini akan muncul apabila menggunakan fungsi in_array() Ia mungkin disebabkan oleh hantaran parameter fungsi yang salah. Mari kita lihat penyelesaian kepada mesej ralat ini. Pertama, anda perlu menjelaskan peranan fungsi in_array(): semak sama ada nilai wujud dalam tatasusunan. Prototaip fungsi ini ialah: in_a

Fungsi hiperbola ditakrifkan menggunakan hiperbola dan bukannya bulatan dan bersamaan dengan fungsi trigonometri biasa. Ia mengembalikan parameter nisbah dalam fungsi sinus hiperbolik dari sudut yang dibekalkan dalam radian. Tetapi lakukan sebaliknya, atau dengan kata lain. Jika kita ingin mengira sudut daripada sinus hiperbolik, kita memerlukan operasi trigonometri hiperbolik songsang seperti operasi sinus songsang hiperbolik. Kursus ini akan menunjukkan cara menggunakan fungsi sinus songsang hiperbolik (asinh) dalam C++ untuk mengira sudut menggunakan nilai sinus hiperbolik dalam radian. Operasi arcsine hiperbolik mengikut formula berikut -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}, Di mana\:In\:is\:logaritma asli\:(log_e\:k)

i9-12900H ialah pemproses 14-teras Seni bina dan teknologi yang digunakan semuanya baharu, dan rangkaiannya juga sangat tinggi. Kerja keseluruhannya sangat baik, dan beberapa parameter telah dipertingkatkan terutamanya dan boleh membawa pengalaman yang sangat baik . Semakan penilaian parameter i9-12900H: 1. i9-12900H ialah pemproses 14 teras, yang mengguna pakai seni bina q1 dan teknologi proses 24576kb, dan telah dinaik taraf kepada 20 utas. 2. Kekerapan CPU maksimum ialah 1.80 ghz, yang bergantung terutamanya pada beban kerja. 3. Berbanding dengan harga, ia sangat sesuai Nisbah harga-prestasi adalah sangat baik, dan ia sangat sesuai untuk sesetengah rakan kongsi yang memerlukan penggunaan biasa. penilaian parameter i9-12900H dan markah larian prestasi

Walaupun model bahasa berskala besar (LLM) mempunyai prestasi yang kukuh, bilangan parameter boleh mencecah ratusan bilion dengan mudah, dan permintaan untuk peralatan dan memori pengkomputeran adalah sangat besar sehingga syarikat biasa tidak mampu membelinya. Kuantisasi ialah operasi mampatan biasa yang mengorbankan beberapa prestasi model sebagai pertukaran untuk kelajuan inferens yang lebih pantas dan keperluan memori yang kurang dengan mengurangkan ketepatan berat model (seperti 32 bit hingga 8 bit). Tetapi untuk LLM yang mempunyai lebih daripada 100 bilion parameter, kaedah pemampatan sedia ada tidak dapat mengekalkan ketepatan model, dan juga tidak boleh berjalan dengan cekap pada perkakasan. Baru-baru ini, penyelidik dari MIT dan NVIDIA bersama-sama mencadangkan pengkuantitian pasca latihan (GPQ) tujuan umum.

Model sumber terbuka yang boleh mengalahkan GPT-4 telah muncul! Laporan pertempuran terkini arena model besar: model sumber terbuka 104 bilion parameter CommandR+ naik ke tempat ke-6, mengikat dengan GPT-4-0314 dan mengatasi GPT-4-0613. Imej Ini juga merupakan model berat terbuka pertama yang mengalahkan GPT-4 dalam arena model besar. Arena model besar adalah satu-satunya penanda aras ujian yang dipercayai oleh master Karpathy. Image CommandR+ daripada AI unicorn Cohere. Pengasas bersama dan Ketua Pegawai Eksekutif permulaan model besar ini tidak lain adalah Aidan Gomez, pengarang termuda Transformer (dirujuk sebagai penuai gandum). Sebaik sahaja laporan pertempuran ini keluar, satu lagi gelombang kelab model besar bermula
