Maison base de données tutoriel mysql PostgresQL建立索引如何避免写数据锁定_MySQL

PostgresQL建立索引如何避免写数据锁定_MySQL

Jun 01, 2016 pm 01:38 PM
如何

bitsCN.com

问题源自一个帅哥在建索引发生表锁的问题。先介绍一下Postgresql的建索引语法: 
Version:9.1 


CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ]    ( { column | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )    [ WITH ( storage_parameter = value [, ... ] ) ]    [ TABLESPACE tablespace ]    [ WHERE predicate ]
Copier après la connexion

这里不解释语法的诸多参数使用(排序,使用方法,填充因子等),主要说一下concurrently的使用场景。 
  
正常情况下Postgresql建立普通btree索引时会阻塞DML(insert,update,delete)操作,直到索引完成,期间读操作不受阻塞。当只有一个用户操作这当然没问题,但是在生产环境,并发比较高的情况下,特别是大表建索引就不能这么操作了,不然用户要跳起来骂娘了,点个按钮一天还没反应过来。 

--使用 
Postgresql提供了一个参数,可以在线建立索引的时候避免因写数据而锁表,这个参数叫concurrently。使用很简单,就是用create index concurrently来代替create index即可。 

--副作用 
当然了,使用这个参数是有副作用的,不使用这个参数建索引时DB只扫描一次表,使用这个参数时,会引发DB扫两次表,同时等待所有潜在会读到该索引的事务结束,这么一来,系统的CPU和IO,内存等会受一点影响,所以综合考虑,仍然让用户自行选择,而不是默认。 

--失败 
在使用concurrently参数建索引时,有可能会遇到失败的情况,比如建唯一索引索引发现数据有重复,又或者用户发现建索引时建错字段的,取消建索引操作了。此时该表上会存在一个索引,这是因为带这个参数的建索引命令一经发出,就首先会在系统的日志表里先插一个索引记录进去,又因为这个索引最终建失败了,所以会被标记一个INVALID的状态,如下:

postgres=# /d t_kenyon       Table "public.t_kenyon" Column |  Type   | Modifiers --------+---------+----------- col    | integer | Indexes:    "idx" btree (col) INVALID
Copier après la connexion

--重建 
遇到上述失效的索引重建时两个办法,一个是drop index index_name,然后再执行create index concurrently。还有一个是执行reindex index_name命令,但是后者不支持concurrent参数。 

--总结 
在生产上执行创建索引命令时最好带上此参数,因为多消耗一点系统资源和时间来换取用户的不间断访问更新是相对值得的。 如果是索引重建,可以再在原基础上建立一个不同名的相同索引,然后取消老的索引。 



参考: http://www.postgresql.org/docs/9.1/static/sql-createindex.html

bitsCN.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Existe-t-il un avenir pour l'emploi en pharmacie clinique à l'Université médicale de Harbin ? (Quelles sont les perspectives d'emploi pour la pharmacie clinique à l'Université médicale de Harbin ?) Existe-t-il un avenir pour l'emploi en pharmacie clinique à l'Université médicale de Harbin ? (Quelles sont les perspectives d'emploi pour la pharmacie clinique à l'Université médicale de Harbin ?) Jan 02, 2024 pm 08:54 PM

Existe-t-il un avenir pour l'emploi en pharmacie clinique à l'Université médicale de Harbin ? (Quelles sont les perspectives d'emploi pour la pharmacie clinique à l'Université médicale de Harbin ?)

Comment réinitialiser le système Win10 Comment réinitialiser le système Win10 Jun 29, 2023 pm 03:14 PM

Comment réinitialiser le système Win10

Comment vérifier la configuration de l'ordinateur Win11 Comment vérifier la configuration de l'ordinateur Win11 Jun 29, 2023 pm 12:15 PM

Comment vérifier la configuration de l'ordinateur Win11

Comment nettoyer le dossier temporaire Comment nettoyer le dossier temporaire Feb 22, 2024 am 09:15 AM

Comment nettoyer le dossier temporaire

Comment télécharger rapidement l'image Win10 Comment télécharger rapidement l'image Win10 Jan 07, 2024 am 11:33 AM

Comment télécharger rapidement l'image Win10

Résoudre le problème de détection de l'environnement lors de la réinstallation du système Résoudre le problème de détection de l'environnement lors de la réinstallation du système Jan 08, 2024 pm 03:33 PM

Résoudre le problème de détection de l'environnement lors de la réinstallation du système

comment réinitialiser le mot de passe dans MySQL comment réinitialiser le mot de passe dans MySQL Feb 18, 2024 pm 12:41 PM

comment réinitialiser le mot de passe dans MySQL

Comment utiliser le framework Phalcon3 en php ? Comment utiliser le framework Phalcon3 en php ? May 31, 2023 pm 03:10 PM

Comment utiliser le framework Phalcon3 en php ?

See all articles