зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-30 21:26:09 +02:00 
			
		
		
		
	m
Этот коммит содержится в:
		
							родитель
							
								
									93ef345dce
								
							
						
					
					
						Коммит
						a20f881130
					
				
							
								
								
									
										2
									
								
								db/sql/features/ds/trees.txt
									
									
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										2
									
								
								db/sql/features/ds/trees.txt
									
									
									
									
									
										Обычный файл
									
								
							| @ -0,0 +1,2 @@ | ||||
| 2024 | ||||
| https://habr.com/ru/articles/812601/ | ||||
| @ -1,3 +1,8 @@ | ||||
| https://habr.com/ru/hubs/desktops/articles/ | ||||
| https://habr.com/ru/search/?target_type=posts&order=relevance&q=[%D0%BC%D0%B8%D0%BD%D0%B8+%D0%9F%D0%9A] | ||||
| 
 | ||||
| 2024 | ||||
| https://habr.com/ru/companies/selectel/articles/811993/ | ||||
| 2023 | ||||
| https://habr.com/ru/companies/selectel/articles/761916/ | ||||
| https://habr.com/ru/companies/selectel/articles/706602/ | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| https://www.geekom.ru/geekom-mini-it13-mini-pc/ | ||||
| 
 | ||||
| 2024 | ||||
| https://habr.com/ru/articles/801837/ | ||||
| https://www.youtube.com/watch?v=jxaRguIK4h0 | ||||
|  | ||||
							
								
								
									
										2
									
								
								hw/garden/strawberry.txt
									
									
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										2
									
								
								hw/garden/strawberry.txt
									
									
									
									
									
										Обычный файл
									
								
							| @ -0,0 +1,2 @@ | ||||
| 2024 | ||||
| https://habr.com/ru/articles/812533/ | ||||
							
								
								
									
										59
									
								
								pages/pg.txt
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								pages/pg.txt
									
									
									
									
									
								
							| @ -289,3 +289,62 @@ WHERE age > 30; | ||||
| ✅ В целом, хотя разработчик может влиять на выбор метода выполнения запросов в PostgreSQL, чаще всего лучшие результаты достигаются путем оптимизации структуры данных и индексов, а также написанием эффективных запросов, а не явным указанием определенных методов выполнения запросов. | ||||
| 
 | ||||
| ***************************************** | ||||
| 
 | ||||
| 🔬 Правила видимости строк в PostgreSQL. | ||||
| 
 | ||||
| В этом посте рассмотрим на основании чего PostgreSQL принимает решения какая строка является видимой для транзакций, а какая является устаревшей. | ||||
| 
 | ||||
| Если описать механизм MVCC в PostgreSQL по-простому, то он работает примерно так: | ||||
| 
 | ||||
| 1️⃣ Есть у нас в базе строка со значением А. Пользователь меняет ее значение А на Б (операция UPDATE); | ||||
| 
 | ||||
| 2️⃣ PostgreSQL под капотом фактически не обновляет данные в строке, а вставляет новую строку со значением Б, а старую строку со значением А помечает как устаревшую. Таким образом у нас получается две версии одной строки; | ||||
| 
 | ||||
| 3️⃣ Потом приходит AUTOVACUUM в таблицу и удаляет старую версию строки со значением А, чтобы освободить место для новых строк. | ||||
| 
 | ||||
| Это, конечно, сильно упрощенный пример, но примерно так и работает MVCC в PostgreSQL. Важно помнить, что любая операция UPDATE в PostgreSQL, это фактически вставка новой строки и пометка старой строки неактуальной. | ||||
| 
 | ||||
| В PostgreSQL есть ряд механизмов и индикаторов , которые помогают ей разобраться с актуальностью версий строк. А именно: | ||||
| 
 | ||||
| ✅ Transaction ID; | ||||
| ✅ xmin; | ||||
| ✅ xmax; | ||||
| ✅ CLOG (Commit Log); | ||||
| ✅ cid; | ||||
| ✅ transaction snapshot; | ||||
| ✅ hintbit. | ||||
| 
 | ||||
| Рассмотрим кратко каждый из них. | ||||
| 
 | ||||
| 📌 Transaction ID | ||||
| 
 | ||||
| Здесь все просто: каждая транзакция в PostgreSQL имеет свой номер (txid). Это 32-битное целое число без знака, позволяющее использовать примерно 4,2 миллиарда идентификаторов транзакций. | ||||
| 
 | ||||
| 📌 xmin | ||||
| 
 | ||||
| Это значение находится в заголовке каждой строки и содержит ID транзакции, которая вставила данную конкретную строку. В нашем примере выше, это строка со значением А. | ||||
| 
 | ||||
| 📌 xmax | ||||
| 
 | ||||
| Это значение тоже находится в заголовке каждой строки и содержит ID транзакции, которая удалила данную конкретную версию строки. Если транзакция завершилась успешно (COMMIT), то это значение сигнал для PostgreSQL, что данная версия строки является устаревшей. В нашем примере, xmax появится у строки со значением А, а у новой строки появится xmin с номером транзакции, которая ее вставила (сделала UPDATE). | ||||
| 
 | ||||
| 📌 CLOG (Commit Log) | ||||
| 
 | ||||
| CLOG (Журнал фиксации), о нем мы более подробно уже говорили (https://t.me/pg_guru/611). | ||||
| CLOG — это структура данных, хранящаяся в общей памяти и сохраняющаяся в каталоге $PGDATA/pg_xact. Целью CLOG является запись статуса транзакций. | ||||
| 
 | ||||
| 📌 cid | ||||
| 
 | ||||
| Идентификатор команды внутри транзакции. Также имеет свои системные поля cmin и cmax. Cmin - идентификатор команды, которая вставила строку внутри текущей транзакции, cmax - индентификатор команды, которая удалила строку внутри транзакции. Cid используется в основном для определения видимости строки внутри работающей транзакции. В общем, смысл такой же как для идентификаторов xmin и xmax, только внутри транзакции. | ||||
| 
 | ||||
| 📌 Transaction snapshot | ||||
| 
 | ||||
| В PostgreSQL используется изоляция транзакций на основе снимков. Каждая транзакция делает свой снимок данных и работает только с ним. Какая версия строки попадет в снимок определяется на основании значений полей xmin и xmax. Если очень сильно упростить, то в снимке видны изменения сделанные транзакцией xmin и не видны изменения, сделанные транзакцией xmax. Т.е. видны те версии строк, которые уже появились в базе, но еще не удалились. | ||||
| 
 | ||||
| 📌 hintbit | ||||
| 
 | ||||
| Бит, помечающий строку как созданную или удаленную завершившейся или откатившейся транзакцией. Без этого бита PostgreSQL пришлось бы заглядывать в CLOG каждый раз для проверки статуса транзакции, что было бы довольно дорого с точки зрения производительности. Фактически это служебная информация, позволяющая увеличить производительность PostgreSQL. | ||||
| 
 | ||||
| Это краткое описание механизмов PostgreSQL, которые отвечают за видимость строк в PostgreSQL. Конечно, сами правила видимости гораздо сложнее, в чем можно убедиться, заглянув в исходный код PostgreSQL. Там будет куча различных проверок и обработок различных исключительных ситуаций. Но для общего понимания особенностей работы MVCC в PostgreSQL информации в посте вполне достаточно 😉 | ||||
| 
 | ||||
| ***************************************** | ||||
|  | ||||
| @ -0,0 +1,3 @@ | ||||
| 2024 | ||||
| https://dev.to/somadevtoo/10-must-know-system-design-concepts-for-interviews-2fii | ||||
|     https://habr.com/ru/companies/bothub/articles/812265/ | ||||
| @ -1,5 +1,7 @@ | ||||
| https://www.anthropic.com/index/claude-2 | ||||
| 
 | ||||
| 2024 | ||||
| https://habr.com/ru/companies/bothub/articles/812659/ | ||||
| 2023 | ||||
| https://techcrunch.com/2023/07/11/anthropic-releases-claude-2-the-second-generation-of-its-ai-chatbot/ | ||||
| https://3dnews.ru/1089788/anthropic-predstavila-v-svobodnom-dostupe-claude-2-drugelyubnogo-chatbota-s-iskusstvennim-intellektom | ||||
		Загрузка…
	
	
			
			x
			
			
		
	
		Ссылка в новой задаче
	
	Block a user
	 Ihar Hancharenka
						Ihar Hancharenka