PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 12. �������� | Fast Forward | Next |
PostgreSQL �ṩ�˸��ָ�������ģʽ���ڿ��ƶԱ��е����ݵIJ������ʡ� ��Щģʽ���������� MVCC ��������������Ϊ��ʱ������Ӧ�ÿ��Ƶ������� ͬ��������� PostgreSQL �����Զ�ʩ��ǡ�������Ա�֤�����õı�������ִ�е�ʱ����һ�ֲ����ݵķ�ʽ��ɾ�������ġ� �����磬�ڴ�����������������ʱ��ALTER TABLE �Dz�����ͬһ��������ִ�еġ���
Ҫ���һ�е�ǰ���ݿ�����������ڳ��е��������ǿ���ʹ��ϵͳ��ͼ pg_locks ��Section 41.33�����йؼ������������ϵͳ��״̬�ĸ�����Ϣ����ο� Chapter 23��
������б���ʾ�˿��õ���ģʽ�����DZ� PostgreSQL �Զ�ʹ�õĻ����� ��Ҳ���������� LOCK ��ȷ��ȡ��Щ���� ��ע��������Щ��ģʽ���DZ�������ʹ���ǵ����ְ������� "row"����Щ��ģʽ����������ʷ��ɵġ� ��ij�ֽǶȶ��ԣ���Щ���ַ�Ӧ��ÿ����ģʽ�ĵ����÷� — �������ⶼ��һ���ġ� ������ģʽ֮���������������������Ų�ͬ�ij�ͻ�����ϡ� ����������ͬһʱ�̲�����ͬһ�����ϳ������ͻ������ ��������һ�����������������ͻ�����磬��������һ���������� ACCESS EXCLUSIVE Ȼ���Ժ��ʱ������ ACCESS SHARE���� �dz�ͻ��ģʽ��������������س��С� ���ر�ע����Щ��ģʽ���Գ�ͻ�ģ����磬������ʱ�� ACCESS EXCLUSIVE ģʽ�Ͳ��ܹ����������ӵ�У� �������ض������Գ�ͻ�ģ����磬ACCESS SHARE ���Ա����������У��� һ��������ij��������ô����ģʽ�����������������
����ģʽ
ֻ�� ACCESS EXCLUSIVE ��ͻ��
SELECT �� ANALYZE �����ڱ����õı�������һ���������� ͨ�����κ�ֻ��ȡ������������������������ģʽ��
��EXCLUSIVE��ACCESS EXCLUSIVEģʽ��ͻ��
SELECT FOR UPDATE ������Ŀ�������Ҫһ������ģʽ���������������б����õ�û�� FOR UPDATE �ı��ϵ� ACCESS SHARE ������
�� SHARE��SHARE ROW EXCLUSIVE�� EXCLUSIVE �� ACCESS EXCLUSIVE ģʽ��ͻ��
���� UPDATE��DELETE�� �� INSERT �Զ����������ģʽ�� �������������������õı��ϵ� ACCESS SHARE ������ ͨ���������������κ��ı������ݵIJ�ѯ����
�� SHARE UPDATE EXCLUSIVE��SHARE�� SHARE ROW EXCLUSIVE��EXCLUSIVE�� �� ACCESS EXCLUSIVE ģʽ��ͻ�� ���ģʽ����һ����������ģʽ�ı�� VACUUM��
VACUUM������ FULL ѡ���������������
�� ROW EXCLUSIVE��SHARE UPDATE EXCLUSIVE�� SHARE ROW EXCLUSIVE��EXCLUSIVE �� ACCESS EXCLUSIVE ģʽ��ͻ�� ���ģʽ�����IJ��������ġ�
CREATE INDEX ���Ҫ����������ģʽ��
�� ROW EXCLUSIVE�� SHARE UPDATE EXCLUSIVE��SHARE�� SHARE ROW EXCLUSIVE��EXCLUSIVE�� �� ACCESS EXCLUSIVE ģʽ��ͻ��
�κ� PostgreSQL ��������Զ�������������ģʽ��
�� ROW SHARE��ROW EXCLUSIVE�� SHARE UPDATE EXCLUSIVE�� SHARE��SHARE ROW EXCLUSIVE�� EXCLUSIVE �� ACCESS EXCLUSIVE ģʽ��ͻ�� ���ģʽֻ������ ACCESS SHARE ����Ҳ����˵�� ֻ�жԱ�Ķ��������Ժͳ��������ģʽ��������ִ�С�
�κ� PostgreSQL ��������Զ�������������ģʽ��
������ģʽ��ͻ�� �� ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, �� ACCESS EXCLUSIVE). ���ģʽ��֤�������ߣ������ǿ��������ⷽʽ���ʸñ��Ψһ����
ALTER TABLE�� DROP TABLE��REINDEX��CLUSTER�� VACUUM FULL ����Ҫ������������ �� LOCK TABLE ����û����ȷ������Ҫ����ģʽʱ����Ҳ��ȱʡ��ģʽ��
��ʾ: ֻ�� ACCESS EXCLUSIVE ���� SELECT ��û�� FOR UPDATE��䣩��
���˱������⣬�����м����� �ض����ϵ��м��������б����µ�ʱ���Զ�����ģ����߱�ɾ��ʱ����Ϊ���£��� ��һֱ���ֵ������ύ���ع��� �м�����Ӱ������ݵIJ�ѯ�� ����ֻ������ͬһ�е�д���� Ҫ�ڲ���ij�е�ǰ���������ڸ��е��м������� SELECT FOR UPDATE ѡȡ���С���ע��һ�������������ض����м����� ��ô������Ϳ��Զ�ζԸ��н��и��¶����õ��ij�ͻ��
PostgreSQL �������ڴ��ﱣ���κι��������е���Ϣ�� ��˶�һ������������û�����ơ� ��������סһ�лᵼ��һ�δ���д����ˣ��� SELECT FOR UPDATE ����ѡ�е����Ա�����ǣ� ��˻ᵼ�´���д��
���˱���ĺ��м���������⣬ ҳ�漶��Ĺ���/������Ҳ���ڿ��ƶԹ�������б�ҳ��Ķ�/д���ʡ� ��Щ����ץȡ���߸���һ�к����ϱ��ͷš� Ӧ�ó���Աͨ������Ҫ����ҳ�����������������ᵽ����ֻ��Ϊ��������
��ȷ������ʹ�ÿ��ܻ����������Ŀ����ԣ� ��������ָ��������������������жԷ��ڴ����������磬 ������� 1 �ڱ� A�ϳ���һ���������� ͬʱ��ͼ����һ���ڱ� B �ϵ��������� ������ 2 �Ѿ����б�B������������ȴ���������ڱ� A�ϵ�һ������������ô��������Ͷ�����ִ�С� PostgreSQL �Զ��������������һ�ͨ���˳�һ�����µ����������������⣬ �Դ�����������������ɡ��������ĸ�����ᱻ�˳��Ǻ���Ԥ�Ƶģ�����Ҳ��Ӧ������������Ԥ�ơ���
Ҫע���������Ҳ���ܻ���Ϊ�м�������������ˣ���ʹ��û��ʹ����ȷ��������Ҳ���ܷ������� ��������һ�����������������������һ������һ������ִ���ˣ�
UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 11111;
��������ָ���ʺŵ�����������һ���м�����Ȼ�ڶ�������ִ�У�
UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 22222; UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 11111;
��һ�� UPDATE ���ɹ�����ָ������������һ���м�����������ɹ������˸��С� ���ǵڶ��� UPDATE ��䷢������ͼ���µ����Ѿ�����ס�ˣ� ������ȴ����и����������������������ھ��ڵȴ�����һ������Ȼ���ټ���ִ�С� ���ڣ�����һִ�У�
UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;
����һ��ͼ��ָ����������һ���м������������ò�����������Ѿ��������������ˡ� �������ȴ��������ɡ���ˣ�����һ�������������ס�ˣ��������������һ������ס�ˣ������һ������������ PostgreSQL ������������������˳�����һ������
��ֹ��������÷���ͨ���DZ�֤����ʹ��һ�����ݿ��Ӧ�ö���һ�µ�˳���ڶ������������������ �������������������������ͬ����˳�������Щ�У���ô�Ͳ��ᷢ�������� ����ҲҪ��֤��һ������������ĵ�һ�����Ǹö�����Ҫ����ߵ���ģʽ�� �����������ǰ��ʵ��Щ���⣬��ô���ǿ���ͨ�����ֳ����³������������˳�������ķ���������
ֻҪû�м�����������һ���ȴ����������м��������ȴ���ͻ�����ͷŲ�ȷ����ʱ�䡣 �����ζ��һ��Ӧ�ó��д�����ʱ��̫���ɲ���ʲô�����飨���������ȴ��û����룩��