Jadual Kandungan
编辑本段说明
编辑本段比锁定的优势
编辑本段GBase8的特性
Rumah pangkalan data tutorial mysql MySQL MVCC实现及其机制_MySQL

MySQL MVCC实现及其机制_MySQL

Jun 01, 2016 pm 01:51 PM
penyimpanan

Multi-Version Concurrency Control 多版本并发控制  

大多数的MySQL事务型存储引擎,如InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制。

事实上,他们都和和另外一种用来增加并发性的被称为“多版本并发控制(MVCC)”的机制来一直使用。

MVCC不只使用在MySQL中,Oracle,PostgreSQL以及其他一些数据为系统也同样使用它。   

你可将将MVCC看成行级别锁的一种妥协,它在许多情况下避免了使用锁,同时可以提供更小的开销。

根据实现的不同,它可以允许非阻塞式读,在写操作进行时只锁定必要的记录。   

MVCC会保存某个时间点上的数据快照。

这意味阒事务可以看到一个一致的数据视图,不管他们需要跑多久。

这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。

如果你从来没有过种体验的话,可能理解起来比较抽象,但是随着慢慢地熟悉这种理解将会很容易。   

各个存储引擎对于MVCC的实现各不相同。

这些不同中的一些包括乐观和悲观并发控制。

我们将通过一个简化的InnoDB版本的行为来展示MVCC工作的一个侧面。   

InnoDB:通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版本号。这是一个随着事务的创建而不断增长的数字。每个事务在事务开始时会记录它自己的系统版本号。每个查询必须去检查每行数据的版本号与事务的版本号是否相同。让我们来看看当隔离级别是REPEATABLE READ时这种策略是如何应用到特定的操作的:   SELECT InnoDB必须每行数据来保证它符合两个条件:   

1、InnoDB必须找到一个行的版本,它至少要和事务的版本一样老(也即它的版本号不大于事务的版本号)。这保证了不管是事务开始之前,或者事务创建时,或者修改了这行数据的时候,这行数据是存在的。   

2、这行数据的删除版本必须是未定义的或者比事务版本要大。这可以保证在事务开始之前这行数据没有被删除。   

符合这两个条件的行可能会被当作查询结果而返回。   

INSERT:InnoDB为这个新行记录当前的系统版本号。   

DELETE:InnoDB将当前的系统版本号设置为这一行的删除ID。   

UPDATE:InnoDB会写一个这行数据的新拷贝,这个拷贝的版本为当前的系统版本号。

它同时也会将这个版本号写到旧行的删除版本里。   

这种额外的记录所带来的结果就是对于大多数查询来说根本就不需要获得一个锁。

他们只是简单地以最快的速度来读取数据,确保只选择符合条件的行。

这个方案的缺点在于存储引擎必须为每一行存储更多的数据,做更多的检查工作,处理更多的善后操作。   

MVCC只工作在REPEATABLE READ和READ COMMITED隔离级别下。

READ UNCOMMITED不是MVCC兼容的,因为查询不能找到适合他们事务版本的行版本;

它们每次都只能读到最新的版本。

SERIABLABLE也不与MVCC兼容,因为读操作会锁定他们返回的每一行数据[1]

编辑本段说明

通过使用MVCC(Multi-Version Concurrency Control)算法自动提供并发控制。MVCC维持一个数据的多个版本使读写操作没有冲突。也就是说数据元素X上的每一个写操作产生X的一个新版本,GBase 8m为X的每一个读操作选择一个版本。由于消除了数据库中数据元素读和写操作的冲突,GBase 8m得到优化,具有更好的性能。特别是对于数据库读和写两种方法,他们不用等待其他同时进行的相同数据写和读的完成。在并发事务中,数据库写只等待正在对同一行数据进行更新的写,这是现有的行锁定方法的弱点。同时MVCC回收不需要的和长时间不用的内存,防止内存空间的浪费。MVCC优化了数据库并发系统,使系统在有大量并发用户时得到最高的性能,并且可以不用关闭服务器就直接进行热备份。

编辑本段比锁定的优势

使用MVCC多版本并发控制比锁定模型的主要优点是在MVCC里, 对检索(读)数据的锁要求与写数据的锁要求不冲突, 所以读不会阻塞写,而写也从不阻塞读。  在数据库里也有表和行级别的锁定机制, 用于给那些无法轻松接受 MVCC 行为的应用。 不过,恰当地使用 MVCC 总会提供比锁更好地性能。

编辑本段GBase8的特性

在 GBase 中的查询功能通过 MVCC 提供的一致性非锁读(在下文我们简称为一致性读),就是提供通过数据库在一个时间点上的快照来实现信息的查询。查询只是对那些在这个时间点之前提交的事务所做的变更,而并不关注在时间点之后的变更或未提交的事务。当然,若是该事务自身进行的变更,对于查询是可见的。  GBase 的默认级别是 READ COMMITTED ,在该隔离级别下事务中的查询语句,使用当前时间戳进行一致性读,每次查询的时间戳是不相同的。  但对 REPEATABLE READ 隔离级别,在同一个事务中的所有一致性读,使用的时间戳均是第一个查询的时间戳,这样读取的也就是由该事务第一次读建立起来的数据快照。用户只有通过提交当前事务,并发出一个新的查询才会得到新的数据快照。  一致性读是 GBase 在 READ COMMITTED 和 REPEATABLE READ 隔离级别下,处理 SELECT 语句中使用的默认模式。一致性读在它读的数据上不设置任何锁,因此在一致性读某个表的同时,其它用户均可以修改这个表。  注意在 DROP TABLE 和 ALTER TABLE 运作时,一致性读无效 。一致性读在 DROP TABLE 上无效是因为 GBase 不能使用已经 drop 的表,该表已经删除。一致性读在 ALTER TABLE 上无效是因为 GBase 会在事务内,重新创建一个新表并从旧表向新表插入记录。这样当用户再次执行一致性读时,在新表中将看不到任何行,因为在新表中的数据都在第一次一致性读的快照之外。
参考资料
  • 1

    《高性能MySQL》第二版

扩展阅读:
  • 1

    http://www.gbase.cn/onlineHelp/html/ManagerManual/ch04020202.html

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

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

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Huawei akan melancarkan produk storan MED yang inovatif tahun depan: kapasiti rak melebihi 10 PB dan penggunaan kuasa kurang daripada 2 kW Huawei akan melancarkan produk storan MED yang inovatif tahun depan: kapasiti rak melebihi 10 PB dan penggunaan kuasa kurang daripada 2 kW Mar 07, 2024 pm 10:43 PM

Laman web ini melaporkan pada 7 Mac bahawa Dr. Zhou Yuefeng, Presiden Barisan Produk Penyimpanan Data Huawei, baru-baru ini menghadiri persidangan MWC2024 dan secara khusus menunjukkan penyelesaian penyimpanan magnetoelektrik OceanStorArctic generasi baharu yang direka untuk data hangat (WarmData) dan data sejuk (ColdData). Zhou Yuefeng, Presiden barisan produk penyimpanan data Huawei, mengeluarkan satu siri penyelesaian inovatif Sumber imej: Siaran akhbar rasmi Huawei yang dilampirkan pada tapak ini adalah seperti berikut: Kos penyelesaian ini adalah 20% lebih rendah daripada pita magnetik. penggunaan kuasa adalah 90% lebih rendah daripada cakera keras. Menurut bloksandfiles media teknologi asing, jurucakap Huawei turut mendedahkan maklumat tentang penyelesaian storan magnetoelektrik: Cakera magnetoelektronik (MED) Huawei ialah inovasi utama dalam media storan magnetik. Generasi pertama ME

Kemahiran pembangunan Vue3+TS+Vite: cara menyulitkan dan menyimpan data Kemahiran pembangunan Vue3+TS+Vite: cara menyulitkan dan menyimpan data Sep 10, 2023 pm 04:51 PM

Petua pembangunan Vue3+TS+Vite: Cara menyulitkan dan menyimpan data Dengan perkembangan pesat teknologi Internet, keselamatan data dan perlindungan privasi menjadi semakin penting. Dalam persekitaran pembangunan Vue3+TS+Vite, cara menyulitkan dan menyimpan data adalah masalah yang perlu dihadapi oleh setiap pembangun. Artikel ini akan memperkenalkan beberapa teknik penyulitan dan storan data biasa untuk membantu pembangun meningkatkan keselamatan aplikasi dan pengalaman pengguna. 1. Penyulitan Data Penyulitan Data Bahagian Hadapan Penyulitan Bahagian Hadapan ialah bahagian penting dalam melindungi keselamatan data. Biasa digunakan

Cara mengosongkan cache pada Windows 11: Tutorial terperinci dengan gambar Cara mengosongkan cache pada Windows 11: Tutorial terperinci dengan gambar Apr 24, 2023 pm 09:37 PM

Apakah cache? Cache (sebutan ka·shay) ialah komponen perkakasan atau perisian berkelajuan tinggi khusus yang digunakan untuk menyimpan data dan arahan yang kerap diminta, yang seterusnya boleh digunakan untuk memuatkan tapak web, aplikasi, perkhidmatan dan aspek lain bahagian sistem dengan lebih pantas. . Caching menjadikan data yang paling kerap diakses tersedia. Fail cache tidak sama dengan memori cache. Fail cache merujuk kepada fail yang kerap diperlukan seperti PNG, ikon, logo, shader, dsb., yang mungkin diperlukan oleh berbilang program. Fail ini disimpan dalam ruang pemacu fizikal anda, biasanya tersembunyi. Memori cache, sebaliknya, adalah sejenis memori yang lebih pantas daripada memori utama dan/atau RAM. Ia sangat mengurangkan masa capaian data kerana ia lebih dekat dengan CPU dan lebih pantas berbanding dengan RAM

Proses pemasangan Git pada Ubuntu Proses pemasangan Git pada Ubuntu Mar 20, 2024 pm 04:51 PM

Git ialah sistem kawalan versi teragih yang pantas, boleh dipercayai dan boleh disesuaikan. Ia direka bentuk untuk menyokong aliran kerja bukan linear teragih, menjadikannya ideal untuk pasukan pembangunan perisian dari semua saiz. Setiap direktori kerja Git ialah repositori bebas dengan sejarah lengkap semua perubahan dan keupayaan untuk menjejak versi walaupun tanpa akses rangkaian atau pelayan pusat. GitHub ialah repositori Git yang dihoskan pada awan yang menyediakan semua ciri kawalan semakan yang diedarkan. GitHub ialah repositori Git yang dihoskan pada awan. Tidak seperti Git yang merupakan alat CLI, GitHub mempunyai antara muka pengguna grafik berasaskan web. Ia digunakan untuk kawalan versi, yang melibatkan kerjasama dengan pembangun lain dan menjejaki perubahan pada skrip dan

Cara menggunakan sessionStorage dengan betul untuk melindungi data sensitif Cara menggunakan sessionStorage dengan betul untuk melindungi data sensitif Jan 13, 2024 am 11:54 AM

Cara menggunakan sessionStorage dengan betul untuk menyimpan maklumat sensitif memerlukan contoh kod khusus Sama ada dalam pembangunan web atau pembangunan aplikasi mudah alih, kami selalunya perlu menyimpan dan memproses maklumat sensitif, seperti bukti kelayakan log masuk pengguna, nombor ID, dsb. Dalam pembangunan bahagian hadapan, menggunakan sessionStorage ialah penyelesaian storan biasa. Walau bagaimanapun, memandangkan sessionStorage ialah storan berasaskan pelayar, beberapa isu keselamatan perlu diberi perhatian untuk memastikan maklumat sensitif yang disimpan tidak diakses dan digunakan secara berniat jahat.

Bagaimanakah PHP dan swoole mencapai caching dan penyimpanan data yang cekap? Bagaimanakah PHP dan swoole mencapai caching dan penyimpanan data yang cekap? Jul 23, 2023 pm 04:03 PM

Bagaimanakah PHP dan swoole mencapai caching dan penyimpanan data yang cekap? Gambaran Keseluruhan: Dalam pembangunan aplikasi web, caching dan penyimpanan data adalah bahagian yang sangat penting. PHP dan swoole menyediakan kaedah yang cekap untuk cache dan menyimpan data. Artikel ini akan memperkenalkan cara menggunakan PHP dan swoole untuk mencapai caching dan penyimpanan data yang cekap, serta memberikan contoh kod yang sepadan. 1. Pengenalan kepada swoole: swoole ialah enjin komunikasi rangkaian tak segerak berprestasi tinggi yang dibangunkan untuk bahasa PHP

Memahami jadual kecerdasan buatan dalam satu artikel: bermula dengan MindsDB Memahami jadual kecerdasan buatan dalam satu artikel: bermula dengan MindsDB Apr 12, 2023 pm 12:04 PM

Artikel ini dicetak semula daripada akaun awam WeChat "Hidup dalam Era Maklumat" Penulis hidup dalam era maklumat. Untuk mencetak semula artikel ini, sila hubungi akaun awam Living in the Information Age. Bagi pelajar yang biasa dengan operasi pangkalan data, menulis pernyataan SQL yang indah dan mencari cara untuk mencari data yang mereka perlukan daripada pangkalan data adalah operasi rutin. Bagi pelajar yang biasa dengan pembelajaran mesin, ia juga merupakan operasi rutin untuk mendapatkan data, praproses data, membina model, menentukan set latihan dan set ujian, dan menggunakan model terlatih untuk membuat satu siri ramalan tentang masa depan. Jadi, bolehkah kita menggabungkan kedua-dua teknologi? Kami melihat bahawa data disimpan dalam pangkalan data, dan ramalan perlu berdasarkan data lepas. Jika kita menanyakan data masa depan melalui data sedia ada dalam pangkalan data, maka ia adalah

Kaedah dan teknik untuk caching dan penyimpanan data menggunakan tatasusunan PHP Kaedah dan teknik untuk caching dan penyimpanan data menggunakan tatasusunan PHP Jul 16, 2023 pm 02:33 PM

Kaedah dan teknik untuk menggunakan tatasusunan PHP untuk melaksanakan caching dan penyimpanan data Dengan perkembangan Internet dan pertumbuhan pesat volum data, caching dan penyimpanan data telah menjadi salah satu isu yang mesti kita pertimbangkan semasa proses pembangunan. Sebagai bahasa pengaturcaraan yang digunakan secara meluas, PHP juga menyediakan pelbagai kaedah dan teknik untuk melaksanakan caching dan penyimpanan data. Antaranya, menggunakan tatasusunan PHP untuk caching dan penyimpanan data adalah kaedah yang mudah dan cekap. 1. Caching data Tujuan caching data adalah untuk mengurangkan bilangan capaian kepada pangkalan data atau sumber data luaran lain, dengan itu meningkatkan

See all articles