RailsConf 2019 – Optimizing your app by understanding your PostgreSQL database by Samay Sharma

(밝은 팝 음악) -이 이야기는 앱 최적화입니다 Postgres 데이터베이스를 이해하면됩니다

제목에서 알 수 있습니다 내가 원했던 것 이 이야기에서 우리는 문제를 다룰 것입니다 당신은 응용 프로그램 사용자의 얼굴, 그들이 성과에 관하여 만드는 불평, 내 쿼리가 느리다는 말 또는 응용 프로그램 개발자로서 어떤 문제가 발생했는지 이해하기 응용 프로그램이 느린하고 다시 묶어 Postgres 데이터베이스에 저장합니다 그래서, Postgres가 당신에게주는 통계의 종류는 무엇입니까? 그래서 당신은 정확히 무슨 일이 일어나는지 알아낼 수 있습니다 무엇이 잘못 되었습니까? 그리고 그것을 고치는 법도 있습니다

그래서, 나 자신에 대해 조금 나는 사 메이다 나는 Citus의 엔지니어로 일하고 있습니다 Citus는 기본적으로 오픈 소스 확장 기능입니다 여러 컴퓨터에서 Postgres를 수평 확장 할 수 있습니다

그래서, 여러분이 단일 노드 Postgres 데이터베이스를 가지고있을 때 성능 문제가 발생하기 시작합니다 따라갈 수없는 당신이 싣고있는 작업 부하의 양과 함께, Citus를 사용하여 여러 서버로 확장 할 수 있습니다 저는 솔루션 엔지니어 팀을 관리합니다 그래서 우리가하는 일은 고객과 함께 일하는 것입니다 우리에게 오는 응용 프로그램 개발자 그들의 응용에 문제가있다

성능 관점에서, 확장 성 관점에서 그리고 그들은 그들의 데이터베이스를 키우기를 원한다 몇 테라 바이트, 수십 테라 바이트, 계속하는 동안 수백 테라 바이트 Postgres의 모든 이점을 유지합니다 그래서 저는 고객들과 함께 도움을줍니다 그들은 그들의 응용 프로그램을 모델링하고, 그들에게 데이터 모델링 등에 관한 권고안을 제시한다 데이터베이스를 확장하는 데 도움이됩니다

나는 나 자신에 관한 재미있는 사실을 포함하고 싶다 내 모든 슬라이드에 최근에 결혼 했어 약 4 개월 전 어떤 사람들은 나에게 재미있는 사실이라고 말하고있다 지금은 잠시 후 재미있는 사실이 아닐 수도 있습니다

(청중 웃음) 그래서 우리는 그것이 얼마나 재미있는지를 보게 될 것입니다 앞서 언급했듯이, Citus는 오픈 소스이며, 당신은 실제로 GitHub citusdata / citus에 갈 수 있습니다 그리고 우리를 그냥 주저하지 Citus에 대해 더 자세히 알고 싶다면, 나는 회의에서 주변에있을거야 우리는 그것에 대해 대화 할 수 있습니다

그러나이 이야기는 Citus에 관한 것이 아닙니다 이 이야기는 주로 Postgres에 관한 것입니다 제가 적용 할 얘기가 뭐든간에, 그것의 모두는 당신의 정상적인 Postgres 데이터베이스에 적용됩니다 그래서 때로는 당신이 직면하는 도전 각 문제와 관련이있다 데이터베이스 내에서 무슨 일이 일어나고 있는지

따라서 애플리케이션 관점에서 느린 쿼리가 표시 될 수 있습니다 또는 사용자가 올 수도 있습니다 내 앱 페이지가 가능한 빨리 로딩되지 않는다고 말하면, 등등 당신은 모니터링 도구 또는 귀하의 디버깅 등등, 문제가 데이터베이스에 있다는 것을 알 수 있습니다 데이터베이스가 느려짐의 원인입니다 자, 어떻게 그 문제가 무엇인지 발견합니까? 근본 원인을 어떻게 묶어 줍니까? 그리고 어떻게 그 문제를 해결할 수 있습니까? 그 문제를 해결하는 가장 간단한 방법 Postgres가 공개하는 통계를 사용하고 있습니다

그래서 Postgres는 실제로 많은 통계를 캡처합니다 ANALYZE를 실행할 때 데이터에 대해 또는 Postgres가 자동으로 ANALYZE를 실행하면, 그것은 많은 통계를 포착하려고합니다 귀하의 데이터에 대해 말하자면, 사용자가 이것을 필터로서 입력하는 경우, 선택도 비율은 어떻게 될 것인가? 따라서 모든 열에 대한 데이터를 추적합니다 또한 데이터베이스에 대해서도 마찬가지입니다 그것은 또한 당신에게 노출됩니다

활동에 대한 데이터를 수집하고이를 사용자에게 노출합니다 나는 통계를 여기에서 모니터링하는 것으로 버킷으로 만들고있다 기본적으로 쿼리 란 무엇입니까? 지금 시스템에서 실행 중입니까? 얼마나 많은 연결이 데이터베이스에 들어 옵니까? 어떤 인덱스가 사용되고 있습니까? 어떤 인덱스가 사용되고 있지 않은가? 얼마나 많은 IO가 수행되고 있습니까? 모든 정보가 실제로 캡처됩니다 Postgres 내의 다른 테이블에서 당신에게 노출되면 당신은 그것들을 정규 표로 질문한다 필요한 정보를 얻으십시오

그리고 몇 가지 관리 통계가 있습니다 관리 서비스를 사용하는 경우 당신은 그들에 대해 조금 신경을 써야합니다 하지만 당신은 관리 서비스 공급자 서버 관리 통계에 신경을 써야합니다 복제는 어떻게 유지됩니까? 데이터베이스의 크기는 얼마입니까? 다른 테이블의 크기는 얼마입니까? 이렇게 자, 내가하려고 할 것은 시작부터 시작하는 것입니다

매우 일반적인 문제, 즉 내 응용 프로그램이 느리다 그리고 모든 사람들이 매번 그 느낌을 갖게 될 것이라고 확신합니다 나는 아무도 말한다라고 생각하지 않는다, 나의 신청은 훌륭하다 항상 빠릅니다 그래서 우리는 그 문제부터 시작할 것입니다

우리가 데이터베이스에 묶여 있다는 것을 알아 냈다고 가정 해 봅시다 우리는 어떻게 거기에 도착합니까? 그래서, 문제는, 내 응용 프로그램이 느립니다 증상, 응용 프로그램 사용자 느린 성능에 대해 불평하고 있습니다 어떤 모니터링 도구를 사용하든, 그것은오고 대부분의 시간을 지적한다 데이터베이스 호출이 진행 중입니다

어쩌면 일정량의 데이터베이스 호출 일 수도 있습니다 어쩌면 그것은 데이터베이스 전체 일 것입니다 그리고 그들이 로딩하고있는 페이지가 무엇이든간에, 모든 것이 천천히 진행되고 있습니다 그리고 당신의 페이지는 만들고 있습니다 수백 개의 데이터베이스 호출을 가정 해 봅시다

어떤 쿼리가 느린 지 알지 못합니다 당신은 정확히 무슨 일이 벌어지고 있는지 모른다 그래서, 어떻게 거기에서 시작합니까? 좋은 출발점 데이터베이스 캐시 적중률을 조사하는 것입니다 따라서 캐시 히트 비율은 실제로 어떤 비율입니까? 얼마나 많은 검색어를 캐시에서 서비스되고 있습니다 대다수가 그것으로부터 오는 것인가, 디스크에서 읽어야한다고 가정 해 봅시다

느낌을 얻는 좋은 방법입니다 데이터베이스가 있어야하는 위치와 데이터베이스가 꺼져있는 위치 거래용 앱의 경우 실제로 원하지 않는 가장 일반적인 작동을 위해 디스크를 쳤을 때, 그래서 당신은 95 % 이상이되고 싶습니다 이상 적으로 캐시 적중률 99 % 또는 귀하의 트랜잭션 애플 리케이션을위한 이제 응용 프로그램에 따라, 애널리틱스 애플리케이션이있는 경우 어디 실제로 저장하는, 10 테라 바이트의 데이터를 가정 해 봅시다

10 테라 바이트의 메모리를 사는 것은 비쌀거야 캐시 히트 비율을 낮추는 것이 좋습니다 하지만 일반적으로 트랜잭션 애플리케이션의 경우는 그렇지 않습니다 자, 질문은, 어떻게 이것을 측정합니까? 어떻게 내가 그걸 지켜 볼 수 있니? 이 연설을 통해 나는 몇 가지 Postgres 테이블을 다룰 것이다 다른 정보가 무엇인지를 통해 이야기하십시오

그들이 제공 할 수있는 방법을 차례로 사용할 수 있습니다 응용 프로그램 성능을 향상시킵니다 pg_statio_user_tables에서 배울 수있는 간단한 쿼리 이건 내가 이야기 할 테이블 중 하나야 얼마나 많은 힙 블록을 읽었는지 계산합니다

전문 용어 관점 힙은 실제로 Postgres가 데이터를 저장하는 곳입니다 인덱스는 인덱스입니다 그래서 그들은 반드시 힙의 일부가 아닙니다 내가 힙 블록을 읽을 때 기본적으로 얼마나 많은 블록을 읽었는가? 힙에서 몇 블록을 맞았습니까? 그리고 그 비율, 블록의 수가 너무 많아서 숫자로 나눈 힙 + 읽기, 종류는 당신에게 비율을 준다

그래서 당신은이 비율을 보았습니다 그것은 pg_statio_user_tables를 사용하고있다 이 데이터의 출처로 테이블이 포착하는 정보를 살펴 보겠습니다 이 테이블의 예제 행에 불과합니다 내가 만든 테이블 중 하나에서

그래서, 테이블의 이름은 무엇입니까? 이드는 뭐니? 스키마 란 무엇입니까? 나는 그게 전부라고 생각합니다 단지 표준적인 것입니다 힙에 대한 정보를 유지한다는 것을 알 수 있습니다 또한 인덱스에 대한 정보를 유지합니다 색인 블록을 읽은 횟수를 알려줍니다 Postgres 버퍼 캐시에서 대, 그것은 버퍼 캐시에서 해당 레코드를 찾을 수 없습니다 그래서 그 기록을 읽어야했습니다

테이블 히트 비율을 얻는 것 외에도 이 테이블에서 인덱스 적중률을 얻을 수도 있습니다 어쩌면 인덱스가 메모리에 맞지 않을 수도 있습니다 그게 당신이 풀어야 할 문제입니다 이들 둘 모두에 따라, 이 테이블에서 그 정보를 찾아 낼 수 있습니다 토스트와 같은 다른 정보도 있습니다

토스트 (Toast)는 매우 큰 기둥이있는 경우입니다 Postgres는 실제로 그들을 압축합니다 별도의 장소에 보관합니다 그래서 그것에 대해서도 측정 할 수 있습니다 거대한 JSON BLOB가 있다고 가정 해 보겠습니다 당신이 Postgres 테이블에 그리고 너는 알아 내고 싶어

디스크에서 읽는 것이 주요 병목입니다 이걸 알아 내면 비율을 구할 수 있습니다 그들 중 어떤 사람이이 문제를 일으키는 지 확인하십시오 캐시 적중률이 낮다는 것을 아는 것만으로도, 캐시 히트 비율이 낮다고 가정 해 봅시다 실제로 많은 것을 의미 할 수 있습니다

그게 네가 할 수있는 것이 아니라는거야 버퍼 캐시에서 작업 부하를 제공하는 방법 하지만 왜 디스크에 갈 필요가 있니? 그리고 그것으로 가능한 문제점은 무엇입니까? 여러 가지 원인이있을 수 있습니다 처음 두 점은 팽창과 자동 진공에 대해 이야기합니다 얼마나 많은 사람들이 자동 진공관에 익숙합니까? 좋아요 기본적으로 Postgres에서 행을 업데이트하거나 삭제할 때마다, Postgres는 반드시 동시에 삭제하지 않습니다

행에 표시되지 않는 것으로 표시합니다 거래를 시작하자 거래 후 그리고 나서 진공이라는 프로세스가 있습니다 와서 모든 행을 정리합니다 그리고, Postgres에는 자동 진공 장치가 있습니다

자동으로 트리거됩니다 수동으로 진공을 트리거 할 수 있습니다 말하자면 모든 행을 정리하자 더 이상 사용되지 않는 하지만 기본적으로 Postgres에는 자동 진공 장치가 있습니다 당신은 그것을 공격적으로 조정할 수 있습니다

또는 덜 공격적이어야합니다 그리고 나서, 당신의 자동 진공관이 충분히 잘 조정되지 않았습니다 그래서 늙은 행을 정리하지 않는거야 그래서 당신은 매우 나쁜 히트 비율을 얻고 있습니다 귀하의 캐시에서

실제로 Bloat은 사용되지 않은 데이터의 덩어리입니다 그것은 일반적으로 부 풀리는 것으로 알려져 있습니다 그래서 당신은 말할 것입니다, 좋아요 테라 바이트의 데이터는 200GB에 불과할 것입니다 실제로 사용할 수있는 데이터입니다

그것의 나머지는 단지 autovacuum이 그것을 깨끗하게 할 수 없다는 것입니다, 그래서 800 기가는 부 풀릴뿐입니다 그리고 그걸 정리하면 많은 공간을 절약 할 수 있습니다 관련 데이터 만 메모리에 저장해야합니다 쿼리가 최적화되지 않았을 수 있습니다 그리고 순차적 스캔을 많이하고 있습니다

Postgres가 데이터를 스캔하는 방법, 일반적으로 순차 스캔 또는 인덱스 스캔 데이터베이스에 인덱스가있는 경우 인덱스를 사용하여 행을 검색합니다 검색어에 대한 관련 행만 이벤트를 저장하는 테이블이 있다고 가정 해 보겠습니다 타임 스탬프에 인덱스를 만들면 마지막 날에 대한 쿼리를 실행하면 Postgres는 해당 색인을 사용합니다 마지막 날의 결과 만 반환하는 것 나머지 데이터는 스캔하지 않습니다 색인을 적절하게 작성하지 않은 경우, 어쩌면 당신은 단지 스캔하고 있습니다 항상 전체 데이터베이스 훨씬 더 정확한 쿼리가 필요합니다

대부분의 프레임 워크는 기본 키를 생성합니다 기본 색인 만 하지만 더 복잡한 쿼리를 수행하는 경우 스스로 색인을 작성해야 할 수도 있습니다 그 문제의 다른 측면은 어쩌면 사용하지 않은 색인이 많이있을 수도 있습니다 그래서 당신은 Postgres가 필요로하는 많은 인덱스를 가지고 있습니다 행을 삽입 할 때마다 포스트그레스는 그 행을 삽입해야합니다

테이블에있는 모든 색인에 네가 많은 걸 가지고 있고 그들이 사용되지 않는다면 전체 데이터 양을 늘릴 수 있습니다 당신은 당신의 데이터베이스에 있습니다 그런 다음 올바른 쿼리에 사용할 수 없게됩니다 다시 말하지만 단일 노드 Postgres를 최대한으로 최적화하려고 시도하십시오 그 이후에 대해 생각하고 싶다면 Citus를 사용하여 샤딩 또는 스케일 아웃 그게 말이되는 때입니다

성능 문제가 발생하는대로 제안하지 않겠습니다 더 많은 하드웨어를 구입하십시오 그리고 그 문제를 해결하려고 노력합니다 네가 할 수있는 일이있다 그러나 한 지점이 지나면 어려워진다

Postgres를 조정하고 볼 수 있습니다 Citus와 같은 다른 기술로 확장 할 수 있습니다 나는 3 개 또는 4 개의 테이블을 파헤 칠 것이다 실제로 도움이 될 것입니다 이 문제들 중 어느 것이 우리 데이터베이스에서 계속되고 있는지

우리는 표준 하나부터 시작할 것입니다 전체 데이터베이스를 포함 이것은 pg_stat_database라고 불린다 다시 한 번 특정 행을 선택했습니다 이 데이터베이스에 대해 그것은 꽤 많은 정보를 제공합니다

백엔드 수, 데이터베이스 이름, 데이터베이스 ID 여기에서 더 중요한 분야 트랜잭션 커밋, xact 커밋 및 xact 롤백 그래서 그것은 얼마나 많은 트랜잭션을 알려줍니다 커밋 된 및 데이터베이스에서 롤백 된, 얼마나 많은 블록이 읽혔는지 알려줍니다 얼마나 많은 블록이 맞았는지 비교합니다 우리는 그 정보를 보았습니다 또한 얼마나 많은 튜플이 있는지 알려줍니다

귀하의 데이터베이스에 삽입, 업데이트, 삭제되었습니다 당신이 많이있을 수도 있습니다 너는 묻는 사람들에 대해 들었을 것이다 너는 좋아, 너의 질문은 너의 데이터베이스 야 삽입 무거운 데이터베이스? 많은 업데이트가 있습니까? 당신은 많은 삭제를합니까? 이러한 질문에 대한 답을 찾으려면, 당신은 여기 올 수 있고 실제로 통계를 얻을 수 있습니다

무엇에, 기본적으로 그 질문들에 대한 답은 무엇입니까? 유스 케이스는 무엇입니까? 일반적으로이 테이블을 사용합니다 for는 가져온 행 수를 찾습니다 데이터베이스에 대한 쿼리에 의해 반환됩니다 자,이 두 용어는 서로 다릅니다 Postgres는 사실이 컬럼들을 약간 재미있게 이름 지었다

하지만 반환 된 튜플을 보면 실제로 얼마나 많은 튜플이 리턴되었는지입니다 그리고 나서 가져온 것은 실제로 얼마나 많은가? 쿼리를 렌더링하는 데 필요한 그래서, 아마도 많은 쿼리를 반환했을 것입니다 하지만 당신은 좋은 지표가 없었어요 불필요하게 많은 행을 반환했습니다 이 비율은,이 특별한 경우를 보면, 당신은 볼 수 있습니다, 나는 0의 숫자가 무엇인지 모르겠다

3 억 6,700 만 명이 튜플을 가져 왔다고 생각합니다 675가 반환되었습니다 그래서 튜플의 반은 실제로 반환되었습니다 그것들은 반환 될 필요가 없었다 그래서 당신은 예를 들어 그것에 인덱스를 넣어서

또 다른 예는 데이터베이스의 삽입, 갱신, h 제 비율 벤치 마크를 할 때, 특정 병목 지점을 찾으려고 할 때, 당신은 알아 내고 싶어합니다 좋아, 내가 삭제 작업량을 조정해야합니까? 삽입 파이프 라인을 조정해야합니까? 업데이트를 조정해야합니까? 이 비율을 찾는 것이 도움이됩니다 그리고 분명히 처리량을 얻을 수 있습니다 어떤 처리량을 찾고 있습니까? 어떤 보장을 하시겠습니까? 귀하의 응용 프로그램 사용자에게? 그리고, 당신을 제공 할 수있는 데이터베이스는 무엇입니까? 그래서, xact 커밋을 보면 너는 알아낼 수있을거야

얼마나 많은 커밋, 얼마나 많은 트랜잭션 이 통계를 재설정 할 수 있습니다 그래서 더 정확한 숫자를 원한다면 특정 날이나 무언가를 위해 이 통계를 재설정 할 수 있습니다 그런 다음 다시 가져 오십시오 이것은 전체 데이터베이스를위한 것이 었습니다 지금 일반적으로 이것은 당신에게 좋은 아이디어를 준다

찾을 곳 그러나 그것은 충분하지 않습니다 내가 너에게 말하면, 알았어 거래가 많다 귀하의 데이터베이스에서 계속, 그건별로 말하지 않습니다 거기에 일부 문제는 처리량, 너 알아 내고 싶어, 알았어

내 작업 부하 중 어느 부분이 원인입니까? 다른 테이블 세트가 있습니다 테이블 정보를 제공합니다 이것은 pg_stat_user_tables라고 불립니다 열이 많아서 읽을 시간이 조금 부족합니다 그러나 더 중요한 것들은 여기에있다

얼마나 많은 시간을 알려주지? 순차적 스캔을 시작했습니다 그 테이블에 몇 번 대 스캔을 시작하고 색인화합니다 그리고 얼마나 많은 튜플 각각을 읽어야 만했는지 그래서, 그것은 매우 유용한 정보입니다 색인이 필요한지 아닌지, 당신이 있다면, 나는 때때로 개발자들과 이야기를 나눴습니다

그들은 좋아, 실제로, 내 데이터베이스와 같다 순차적 스캔을해서는 안됩니다 우리는 한 번에 5 행 이상을 스캔하지 않습니다 그런 다음 우리는 데이터베이스에 간다 그리고 매우 다른 경우 데이터베이스의 그림

데이터베이스는 항상 순차적 스캔을 수행합니다 왜냐하면 당신이 5 열을 요구하고 있기 때문에, 데이터베이스에 알려주는 색인이 없을 수도 있습니다 5 개의 행을 스캔하면됩니다 당신에게 그 정보를 얻기 위해서 그것이 당신에게 말해주는 다른 것은 튜플의 수입니다

삽입, 업데이트, 삭제됨, 다시 비슷한 통계 테이블 기준 라이브 튜플의 수, 죽은 튜플의 수, 저것은 부 풀리는 곳과 자동 진공관이 오는 곳입니다 이것은 매우 깨끗한 데이터베이스였습니다 그래서 그것은 가지고 있지 않으며 죽은 튜플 하지만 아마도 그럴 일은 없을거야 이걸 데이터베이스에서 실행할 때

죽은 튜플의 수는 기본적으로 더 이상 사용할 수없는 튜플 그러나 Postgres는 그들을 정리하려고하지 않았습니다 그렇게하면 부 풀릴 생각이 생기므로, 부 풀리는 Postgres를 검색하면 매우 복잡한 쿼리가 생성됩니다 기본적으로이 표와 같이 너에게 저 정보를 줄 광고 몇 다른 테이블 기가 바이트 또는 테라 바이트의 관점에서, Postgres 데이터베이스에 얼마나 부 풀었습니까? 테이블 등으로 무너지고, 정확한 질문을하고 싶지 않았습니다 너희들이 관심이 있다면 유용한 쿼리를 추가 할 수 있습니다 슬라이드 부록에 그래서 당신들은 복사, 붙이기, 실행 만 할 수 있습니다

귀하의 데이터베이스에 유용하고 있는지 확인하십시오 그리고, 그것은 또한 여러분에게 마지막 진공 상태를 보여줍니다 자동 진공, 마지막 분석, 자동 분석, 그래서 내가 말했듯이 Postgres에는 자동 진공 장치가있다 가끔씩 올라 오는 실제로 진공을 실행하고 데이터베이스를 분석합니다 진공 청소기는 팽창을 청소하는 것입니까? 분석 대상은 통계를 캡처하는 것입니다

쿼리에서 이러한 통계를 사용할 수 있습니다 그 정도면 충분하지 않다면 또는 당신이 괜찮은 느낌이 든다면, 내 자동 진공관처럼 충분히 조정해야합니다 그 모든 부 풀기를 제거하기 위해, 아마도 그렇지 않다 알다시피, 17 일, 좋아, 내가 씨앗 데이터베이스 어디서 같은, 1 년 동안 테이블에 자동 진공이 공급되지 않았습니다 데이터베이스 크기는 2TB이고, 진공 상태가되면 700 기가가됩니다

일반적으로 이것은 발생하지 않을 것이며, 이것은 또한 극단적 인 경우이다 하지만 기본적으로 Postgres autovacuumes 당신의 테이블이 20 % 바뀌었다 일반적으로 충분하지 않은 기본값입니다 대형 데이터베이스의 경우 데이터베이스에 10 억 개의 행이 있다고 가정 해 보겠습니다 너까지 기다리고있어

당신은 2 억 행의 부 풀림을합니다 실제로 그것을 치우기 위해 그것은 사실이 아닐 수도있다 대부분의 내가 이야기하는 Postgres 사용자는 큰 데이터를 가지고 있으며, 그래서 그들이 Citus를보고 있습니다 이러한 문제는 매우 자주 발생합니다 네가 가질 때, 아주 자주 와라

큰 데이터베이스가있을 때 Pg_stat_user_tables, 당신은 무엇을 할 수 있습니까? 대략의 라이브, 데드 튜플 수 당신에게 얼마나 부 풀리는지를 알려줍니다 표가 삽입, 갱신, 삭제 여부를 확인하십시오 실제로 우리에게는 본질적으로, 그들의 작업 부하의 60 % 이상이 업데이트되었습니다 그리고 나서 그것은 막 온 것입니다

앱의 한 문장에서 그들은 마치 "이 업데이트가 있다는 것을 알았 더라면 주요한 문제이다 " 그들은 작업량을 약 90 %까지 줄일 수있었습니다 앱 핵심 부분 만 수정하면됩니다 업데이트 횟수를 줄입니다 당신이 당신의 기대치를 당신의 데이터베이스에서 찾아낸다면

나는 좋아, 나는 많은 질문을하지 않을 것이다 때로는 활성 레코드가 당신을 위해 쿼리를하고있을 수도 있습니다 그리고 당신은 깨닫지 못할 수도 있습니다 코드를 특정 방식으로 작성한 것 데이터베이스에서 훨씬 더 많은 트래픽을 발생시킵니다 분명히 autovacuum, autoanalyze, 너의 테이블이 있는지 알아봐

충분히 진공 청소기로 채워지는지 여부 그리고 이것은 정말 유용하다고 생각합니다 순차 스캔 수와 인덱스 스캔 수입니다 트랜잭션 형 앱의 경우 순차 스캔 일반적으로 필요한 경우가 아니면 전체 데이터 세트에서 분석을 수행하고 있습니다 다수의 순차적 스캔을 볼 경우 깃발을 들어야합니다 인덱스에 대해서도 비슷한 통계가 있습니다

색인, 색인 스캔이 있습니다 해당 테이블에서 인덱스 스캔을 몇 번 시작 했습니까? 일반적으로 당신은 쓰기 문제가 많습니다 쓰기 처리량이 충족되지 않습니다 당신은 많은 색인을 가지고 있기 때문에, 테이블에 15 개의 인덱스가 있습니다 너가 가서 얼마나 많은 것을 보았을 때

이러한 인덱스 중 사용중인 당신은 그들 중 7 명이 심지어 사용되지 않는다는 것을 깨닫는다 귀하의 질문에 의해 인덱스는 항상 저장 공간간에 균형을 유지합니다 쓰기 처리량 및 읽기 처리량을 제공합니다 그리고 그것이 의미가있는 시점이 있습니다

실제로 비용을 들여 인덱스를 생성한다 드라이브 속도 저하 그러나 당신이 모든 것에 단지 색인을 가지고 있다면 실행할 수있는 쿼리 실제로 데이터베이스가 손상됩니다 도움이되는 것 이상 아마도 불필요한 부분이 많이 생기기 때문입니다 데이터베이스에 계속 씁니다 그것은 가장 유용한 것들입니다

다시 말해서, 튜플을 읽거나 튜플을 반입했다는 것을 알려줍니다 이것은 완벽한 지표였습니다 그래서 당신이 읽을 필요가있는 것을 독서하는 것 하지만 때로는 쿼리를 실행하는 경우 3, 4 개의 필터 당신은 그들 중 하나에 대해서만 색인을 가지고 있습니다 그럼 당신은 차이점을 발견 할 것입니다 이것들과 인덱스가있는 것을 보면 그냥 너무 많은 행을 읽고있다

그것이 필요한 많은 것보다, 더 구체적인 색인으로 만들 수 있습니다 그것을 복합 색인으로 만들어서 두 개의 열 또는 세 개의 열로 구성됩니다 그것들은 pg_stat_user_indexes입니다 자, 우리가 처음에 해결했던 문제로 되돌아 와서, 이는 캐시 적중률이 좋지 않음을 나타냅니다 실제로 정보를 사용할 수 있습니다

이 세 가지 모두에서 테이블과 더 많은 것들이 있습니다 하지만이 3, 4 가장 좋은 출발점이다 눈부신 모든 문제를 발견 한 곳 어떤 것이 있다면 왜 그랬는지 이해합니다 당신은 나쁜 타격 률을 보였습니다 그래서, 실제로, 나는 응용 패턴을 말해야합니다

하지만 당신은 데이터베이스 패턴을 본다 애플리케이션 측면과 일치하지 않는 그래서 많은 업데이트를하지 말아야한다고 생각합니다 하지만 그것은 당신의 데이터베이스 메인 워크로드를 밝혀냅니다 알았어, 나는이 테이블을 생각해 작아야한다, 나는 그것이 너무 크다는 것을 깨닫는다

이 테이블에 죽은 줄을 써서는 안됩니다 그래서 이것은 당신이 가정을 점검하는 데 도움이됩니다 더 깊이 들어가서 고칠 수 있습니다 부 풀리는 것이 많으면, 당신의 더 큰 테이블 인 테이블이 있습니다 그러나 그들은 매우 적은 진공 청소기로 청소됩니다

실제로 자동 진공관을 튜닝 할 수 있습니다 변경의 2 %에서 트리거합니다 당신은 내 테이블의 2 %가 바뀌면, 테이블에 진공을 일으킨다 이것은 매우 유용합니다 실제로 대형 테이블의 경우 약 2 %를 권장합니다

그래서 당신은 그것으로 시작할 수 있습니다 실제로 증가시킬 수도 있습니다 autovacuum이 사용하고있는 프로세스의 수 그것은 당신이 할 수있는 또 다른 일입니다 그래서 자동 진공이 충분히 빈번하게 시작됩니다

그러나 그것은 변화의 속도를 따라 잡을 수 없습니다 그런 다음 더 많은 코어를 제공해야 할 수도 있습니다 유지하려면 자동 진공 장치에 연결하십시오 어쩌면 순차적 스캔을 많이하고있는 것일 수 있습니다 그게 문제라면 몇 가지 색인을 만들어야합니다

어쩌면 불필요한 색인이 많이있을 수도 있습니다 나는 3 가지를 함축하고 4 가지를 함축하려하지 않는다 모든 것이 있지만 일부는 있을지도 모른다 불필요한 항목을 삭제할 수 있습니다 좋은 성능을위한 색인

이 모든 것들은보다 일반적이며, 나는 특정 쿼리를 보지 않는다는 것을 의미한다 특정 검색어를 최적화하지 않고 그래서 이것은 일반적으로 시작하는 데 유용합니다 그런 다음 좋아하기 시작합니다 좋습니다, 이것들이 문제의 종류입니다 하지만, 당신이이 일을 너는 좋은 색인을 가지고있다

또는 캐시 적중률이 낮아서 성능이 저하 될 수 있습니다 특정 쿼리가 충분히 잘되고 있습니다 특정 검색어는 여전히 실적이 좋지 않습니다 특정 웹 페이지가 여전히 느립니다 어떻게 분리합니까, 느린 쿼리는 무엇입니까? 이것은 pg_stat_statement와 같습니다

그 질문에 대한 답입니다 그리고 그것은 실제로 내 동료 중 하나입니다, Claire는 FOSDEM에 있었고 가장 일반적인 조언이었습니다 기본적으로 pg_stat_statements를 사용합니다 그래서 pg_stat_statements는 무엇을 하는가? Postgres의 확장 기능입니다 이 실행 통계 서버가 실행 한 모든 SQL 문 중 하나

실제로 쿼리를 정규화하고 함께 그룹화합니다 그래서 각각의 모든 쿼리는 실행되지 않을 것입니다 이 형식의 모든 쿼리에 대해서는 저장됩니다 이것에 관한 통계입니다 모든 특정 통계를 살펴 보겠습니다

내보내고 사용자에게 내 보냅니다 놀랍게도보기를 사용하여 pg_stat_statements라고도 부릅니다 다시 쿼리 할 수 ​​있습니다 정기적 인 Postgres 테이블처럼 테이블에서 통계를 얻으십시오 그래서, 그 견해에는 무엇이 포함되어 있습니까? user_id, db_id, query_id 및 쿼리 텍스트가 있으며, 그리고 그것이 데이터베이스에서 실행 된 횟수

한 쿼리가 느린 경우 하지만 5 일에 1 번 실행됩니다 괜찮을거야하지만 쿼리가 있다면 5, 10, 15 밀리 초를 절약 할 수있는 것과 같습니다 하지만 그것은 하루에 수천 번 실행됩니다 실제로 최적화하는 것이 더 유용합니다

또한, 일종의, 같은 시간, 최소 시간은 얼마입니까? 이 유형의 쿼리를 실행하는 데 걸렸습니다 Max_time, mean, 그것은 또한 표준 편차를 제공합니다 당신이 이해할 수 있도록, 좋아, 아마도 한 두 가지의 나쁜 사건 하지만 항상 나쁜,이 쿼리를 수행 무엇입니까? 그리고 그것이 실행 된 횟수를 알려줍니다 두 조각을 서로 연관 지을 수 있습니다 또한 IO에 대한 정보를 알려줍니다

공유 된 블록의 수 쓰다, 쓰다, 더러워 졌어? 얼마나 많은 지역 블록이 쳤고, 쓰여지고, 더러워 졌습니까? 또한 블록 읽기 및 쓰기에 소요 된 총 시간 몇 가지 예를 들어 보겠습니다 당신이이 정보로 무엇을 할 수 있는지 가장 일반적인 쿼리 중 일부입니다 데이터베이스를 즉시 실행합니다

시간이 많이 걸리는 상위 10 개 쿼리는 무엇입니까? 당신은 내가 total_time을 사용하고 있음을 알아 차리고, 나는 one_time을 사용하지 않으므로 이것이 당신에게 알려줍니다 데이터베이스에 대한 쿼리는 무엇입니까? 그 시간의 대부분을 보내고 있습니다 사실 total_time이기 때문에 본질적으로 mean_time에 전화를 곱한 결과입니다 그래서 그것은 단지 전화를 보는 것과 반대되는 좋은 측정입니다 이것이 가장 일반적인 쿼리라고 말합니다

하지만 밀리 초만에 실행하면 괜찮습니다 또는 쿼리 시간 만 사용하면됩니다 하지만 어쩌면 매우 일찍 실행될 수도 있습니다 이것은 일반적으로 좋은 방법입니다 때로는 예를 들어, 나쁜 캐시 적중률의 예에서, 너는 너가하고있는 걸 알지

많은 디스크가 당신이 알아 내고 싶은 것을 읽을 정도로 읽습니다 상위 10 개 검색어는 무엇입니까? 디스크 읽기에 대부분의 시간을 소비 모니터링 도구에서 알 수 있듯이, 알다시피 내 시간이 많이 갈거야 디스크 읽기에서는 쿼리 만 찾습니다 당신은 그 쿼리 만합니다 아니면, 그냥 가고 싶다

가장 많이 사용되는 상위 10 개 검색어는 무엇입니까? 당신이 일종의 일을 할 때 유용합니다 벤치마킹 등의 당신은 벤치 마크하고 싶지 않아 좋아, 최악의 쿼리를 벤치마킹하고 싶다 하지만 가장 일반적인 쿼리를 벤치마킹하려고합니다 이 모든 정보를 가져올 수 있습니다

너의 시선을 정확하게 말하다 정확히 무엇을 튜닝해야할까요? 일반적으로 최적화를 수행하는 것이 아닙니다 좋은 모범 사례를 기본으로 수행 한 후에 이것은 내가 강력하게 추천하는 질문이다 데이터베이스에서 실행되어 어느 것을 찾아야하는지 너는보고 있어야한다 이 블로그 게시물 중 하나입니다

pg_stat_statements에 표시되므로 가장 중요한 것은 무엇입니까? 그것은 당신에게 통화, total_time, mean_time, max_time 및 표준 편차 시간 그것은 또한 당신의 질문을 좋아합니다 화면에서보기 좋게 보이도록 당신은 쉽게 그것을보고 디버깅 할 수 있습니다 그것은 현재 사용자의 쿼리만을 보여줍니다 그것은한다

현재 사용자가 아니라, 백업 사용자가 아닌 모든 것 그래서 때로는 백업 일이 나타날 것입니다 그리고 나서 상위 15 개 검색어를 찾습니다 평균 시간으로 정렬 이것은 일반적으로 실행할 좋은 쿼리입니다

그리고 좋은 출발점 그것은 당신에게 많은 것을 보여줍니다 이 예제를 보면 그것은 말한다, 좋아, 데이터베이스가 실행 된 total_time 이 쿼리에 소요 된 시간은 약 121 초입니다 mean_time은 실제로 86one입니다 max_time은 3 초, 3

7 초입니다 이것은 표준 편차이며, 이 많은 행이 이것으로부터 리턴됩니다 자, 가서 데이터베이스에서 실행하십시오 흥미로운 것들을 찾을거야 그것에서 나오는

자, 당신이 알아 냈다고 가정 해 봅시다 느린 쿼리는 무엇입니까? 자, 당신은 그들을 조정하기 위해 무엇을합니까? 그건, 여러 번 이야기 할 수 있다고 생각합니다 여러 워크샵을 자체적으로 진행합니다 그러나 그것의 아주 기본 EXPLAIN ANALYZE를 수행하여 시작하는 것입니다 그래서, 당신이 쿼리를 데리러, EXPLAIN ANALYZE를 수행합니다

알고있는 것이 유용하고 이것은 공통점입니다 사람들은 일반적으로 EXPLAIN을 수행합니다 EXPLAIN은 Postgres가 생각하는 것만을 제공합니다 그것의 세계관의 그러나 실제적으로 일어날지도 모른 무엇이 아닙니다 쿼리를 실행할 때 EXPLAIN을 보면 그리고 당신은 그것이 당신에게 말하는 비용을 보았습니다 이것이 더 복잡한 계획이라면 당신은 더 많은 비용을 볼 수 있습니다

그리고 그 Postgres 견적 이거 오래 걸릴거야 실제로는 전혀 사실이 아닐 수도 있습니다 보길 원하는 것 EXPLAIN ANALYZE를보고있을 때 실제 시간입니다 오른쪽에는 실제 시간이 표시됩니다 다음과 같은 경우를 보여줍니다

행이 출력되었고, 출력 된 행 수 이것은 매우 간단한 쿼리입니다 모든 행을 선택하는 것입니다 여기서 특정 열 값은 1입니다 그것은 당신에게 보여줍니다, 그것은 약 9,584 행을 반환 할 것으로 예상됩니다, 실제로 약 10,000 행을 반환합니다

따라서 꽤 가깝습니다 예상치는 꽤 가깝습니다 그런 다음 쿼리 계획을 읽습니다 그런 다음 계획의 어느 부분을 파악하는지 가장 많은 시간을 들이고 있습니다 실제 시간에는 추정치가 아니라 그런 다음 색인 생성을 통해 조정할 수 있습니다

또는 다른 Postgres 튜닝 매개 변수를 조정하여 자, 그건 단지 표준적인 부분입니다 아시다시피, 당신이 분석을 할 때, 쿼리에서 가장 느린 부분 조정 하지만 Postgres는 실제로 당신에게 알려줍니다 EXPLAIN의 몇 가지 흥미로운 점도 있습니다 이 쿼리를 살펴 보겠습니다

그래서, 나는 테이블에서 선택하고있다 여기서 열 1은 1이고 열 2는 0입니다 당신이 이것을 보게된다면, 당신은 알 것입니다 쿼리 계획을 조정할 수 있지만 실제로 거기에는 불일치가있다 중요한 불일치는 100 배 이상입니다

Postgres가이 쿼리가 반환 할 것이라고 생각하는 측면에서, 그래서 Postgres는 100 행을 반환 할 것으로 추정합니다 실제로 데이터베이스는 10,000 개의 행을 반환합니다 그리고 그것은 정말로 벗어났다 그래서, 만약 당신이이 계획보다 위의 것을 가졌다면, 그래서 집계를한다면, 조인을하고 있다면, Postgres가 실제로 선택할 계획 좋지 않을거야 그것은 단지 100 개의 행만 믿기 때문입니다

스캔에서 올거야 하지만 실제로는 1 만 행이 올 것입니다 스캔에서 실제로주의해야 할 것이 있습니다 Postgres 튜닝에 대한 많은 조언이 있다고 생각합니다

한 번 당신이 EXPLAIN ANALYZE를 본 것처럼 그것에 대해가는 방법 그러나 그 다음 거기에있다 고려해야 할 중요한 것 느린 쿼리가 항상 그런 것은 아닙니다 인덱스를 추가하고 작업 속도를 높일 수 있습니다 때때로 Postgres에 잘못된 통계가있을 수 있습니다 또는 충분한 데이터를 보지 못했습니다 데이터에 대한 올바른 통계를 얻을 수 있습니다

이것을 보면, 문제는 이것 이후에 일어나는 일, 나쁜 실행 계획처럼 매우 나쁠 수도 있습니다 그리고 그건 당신이 창조하지 않았기 때문이 아닙니다 올바른 색인 또는 다른 것, 그것은 단지 Postgres 무언가가 올거라 생각했다 이 특정 스캔에서 행 수가 훨씬 더 많았습니다 나쁜 통계가 표시되는 첫 번째 단계 높은 것으로 다시 분석하는 것입니다

기본 통계 대상 실제로 행 수 Postgres 데이터 분포를 추정하는 데 사용됩니다 그래서, 알겠습니다 Postgres가 더 많은 행을 스캔하기 때문에 더 비쌉니다 그 통계를 얻으려고하지만 통계를 만든다

훨씬 더 정확합니다 그게 처음 시작하는거야 그러나 여기의 문제는 사실 그 것이 아닙니다 당신이 어떻게 할 수 있는지에 대한 예를 한 가지만 골라 둡니다 통계가 일치하지 않으면 Postgres에게 실제로 어떻게 말할 수 있습니까? 통계 수정 Postgres가 어떻게 통계를 향상시킬 수 있는지에 대해 설명합니다

여기에 문제가있는 이유는 이 특별한 스키마에있다 제 1 열 및 제 2 열은 서로 상관된다 실제로 두 번째 열, 두 번째 열의 값, 내가 아는 데이터를 채웠다 실제로 열 1을 10으로 나눈 값입니다 그래서, 당신이 칼럼 1을 안다면, 실제로 가치를 결정하는 데 충분합니다

열 2의하지만 포스트그레스는 그것에 대해 아무것도 몰라요 기본적으로 Postgres는 통계 만 캡처합니다 독립적으로 단일 열에 대해 그래서 그것은 말합니다, 아마도 1 만 줄이 될 것입니다 1 열에서 반환, 2 열에서 10,000 이제 두 필터가 함께 적용됩니다

그러면 아마 100 줄을 얻을 수있을 것입니다 따라서 선택도를 사용하여 예상치를 발행합니다 이 숫자를 생각해 내야합니다 하지만 실제로 이것은 생산하지 않을 것입니다 인덱스에 관계없이 올바른 결과 Postgres에 말하지 않으면 아무 것도 추가하지 않습니다

이 둘 사이의 상관 관계에 대해서 그래서 Postgres는 멀티 컬럼 통계를 선언 할 수있게 해주 며, 그것은 기본적으로 그것을하지 않습니다 그것이 그것을 할 것이기 때문에 모든 열 (row)의 순열 (permutations)과 조합 (combination) 당신의 테이블에있는 모든 칼럼들, ANALYZE는 너무 오래 걸릴 것입니다 하지만 Postgres에 두 개의 열이 서로 연관되어 있음을 알 수 있습니다 그것에 대한 통계를 작성합니다

그래서 그것은 구문입니다 우리는 그것에 들어갈 필요가 없지만, 궤도 의존 통계 제 1 열, 제 2 열 일단 그 정보가 있으면 당신은 이것이 정확히 같은 쿼리라는 것을 알 수 있습니다 나는 테이블을 분석 한 후 다시 실행했다 그리고 Postgres에게 캡처하도록 알려줍니다 볼 수있는 상관 관계 통계 순차 스캔이 있습니다

현재 9,584 개의 행을 예측합니다 100 대신에 그리고 훨씬 더 정확합니다 이것 이후에 일어날 일들은 훨씬 더 효율적입니다 실제로,이 통계가 아주 보이는 것처럼 보입니다 사람들이 그렇게 생각하지 않아요

실제로 큰 영향을 미칩니다 이것은 사실 7 월에 작년에 내가 트위터에 올린 것입니다 우리는 고객을 보았습니다 수천 배 빠른 성능 그리고 나는 그것이 같아 보인다는 것을 안다, 이 SQL 쿼리를 실행해야했습니다 1000 배 더 나은 성능을 얻으려면 그러나 그것은 일어난다

잘못된 쿼리 계획 견적 이것은 간단한 쿼리입니다 더 복잡한 쿼리 인 경우 너는 많은 이슈가있을거야 Postgres가 생각하기에 행 수는 다릅니다 그것이 실제로있는 것에서 따라서 이것을 요약하기 위해 pg_stat_statements 최적화 할 수있는 적절한 쿼리 집합을 찾고, EXPLAIN ANALYZE를 사용하고 가장 느린 부분을 튜닝하고, 다시 ANALYZE에 중점을두고, EXPLAIN을보고 가정하지 마라

Postgres가 할거야, 우리는 EXPLAIN이 매우 다른 것을 보았습니다 어떤 경우에는 실제로 일어나는 일로부터 차이점을 눈여겨 보아라 견적 및 실제 수정 방법을 찾고, Postgres에게 통계를 수정하도록 알려주십시오 항상 정확하지 않을 수 있기 때문입니다 그래서, 그것은 기본적으로 내 이야기의 주요 내용입니다

빠른 견적에 보너스를 추가했습니다 그래서 이것은 반드시 필요한 것은 아닙니다 나머지 이야기와 관련있다 성능 조정 및 기타 측면에서 하지만 Postgres 캡처를 사용하면 실제로 많은 좋은 견적을 얻을 수 있습니다 어떤 것들에 대해서, 지금 당장 매우 비싼 쿼리를 실행하고있을 수 있습니다

그걸 알아 내려고 그것은 pg_stats에 캡처됩니다 각 열에 대한 정보를 수집합니다 Postgres는 그것에 대해 생각합니다 이것을 보면 널 (Null) 부분을 알 수 있습니다

처음부터, 그것은 당신에게 명백한 가치의 수를 알려주고, 여기에는 고정 된 수의 고유 한 값이 있습니다 그래서 천을 말한다 때로는 비율을 알려주므로 말할 수 있습니다 오케이, 20 %의 테이블 분명한 가치의 숫자가 될 것입니다 때때로 이해하는 것이 유용합니다

가장 흥미로운 것들 나는 해키 스크립트를 써서, 가장 일반적인 값이며 가장 일반적인 빈도입니다 에 대한 견적을 위해, 좋아, 우리 10 대 고객, 당신은 실제로 그들로부터 좋은 견적을 찾을 것입니다 가장 일반적인 가치관에서 그렇게 말할 것입니다 알았어, 가장 일반적인 값은 다음과 같다 이 고객에 대해 가지고있는 행 수 대부분의 일반적인 주파수에서 말하자면 말입니다

그래서, 이것이 실제로 무엇을 말하는지, 가치 945에 대한 것입니다0017 데이터베이스의 행 수로, 특정 ID가 갖는 행 수입니다 그래서 당신은 그것을 위해 사용할 수 있습니다 근본적으로 근사하고, 당신이 알아 내고 싶다고 말하는 것처럼, 당신의 테이블이 있다고 가정 해 봅시다

네트워크 바이트와 당신이 알아 내고 싶어 어느 장치가 실제로 많은 양의 바이트를주고 있는지를 나타냅니다 가장 많은 양의 바이트를 방출하는 장치, 당신은 복잡한, 그것이 복잡하지 않더라도, 확실히 비싼 계정 별개의 쿼리입니다 그것을 알아 내기 위해, 나는 여기에 갈 것이다 Postgres에 상위 10 개 기기에 대한 통계가 있는지 확인하십시오 그리고 그걸 사용해서 알아낼 수 있습니다

알았어, 얼마나 많은 패킷이 방금 시스템을 통과했는지, 우물 Postgres는 그것을위한 견적을 가지고 있습니다 거친 공 공원을 줄 수 있어요 이것들은 당신이 할 수있는 것들입니다 2 천 1 백만 건, 345 천건 중 한 건의 결과, 너는 그들에게 실제로 말할 필요가 없다 정확한 숫자는 얼마입니까? 당신은 이것에 대해 많이 말할 수 있습니다

다른 유용한 통계는 얻을 수 있습니다 그 히스토그램 범위도 마찬가지입니다 특정 가정이 있다면 데이터가 어떻게 퍼져 나가야하는지 당신은 분명히 그것을 확인할 수 있습니다 내가 이것을 사용하는 근사값은 다음과 같습니다 특정 열의 널 비율은 얼마입니까? 대략적인 숫자는 무엇입니까? 한 값에 대해 고유 한 값이 있습니까? 당신은 카운트를 구별 할 필요가 없다는 것을 알았습니다

반드시 그것을 알아내는 것 너는 여기를보고 얻을 수있다 그것이 무엇인지에 대한 대략적인 아이디어 그리고 가장 일반적인 가치는 무엇입니까? 란을 위해 그 행을 가진 대략적인 수 근사치 이것은 내가 일반적으로하는 또 다른 것입니다

당신이 매우 큰 데이터베이스를 가지고있는 것처럼, Postgres는 카운트 스캔을 캐시하지 않습니다 그래서 사람들은 카운트 스타가 매우 기대하고 있습니다 저렴한 쿼리, 그것은 Postgres에 없습니다 실제로 전체 테이블을 스캔해야합니다 각 행을 계산합니다

그래서 나는 10 억 줄의 테이블을 가지고있을 때 그걸 좋아하지 않습니다 그래서 나는 이것에 가서 거친 공 공원을 얻는다 이 테이블은 얼마나 큰가요? 이 테이블에서 어떤 작업을 할 수 있습니까? 내가 알면, 너는 갈 수있어 pg_class라는 테이블이 있습니다 당신은 거기에 가서 진짜 튜플을 찾을 수 있습니다

Postgres의 추정치 얼마나 많은 튜플이 있는지 요약하면, Postgres는 꽤 많은 통계를 보여줍니다 이 강의에서 우리는 주로 다루었습니다 성능과 관련된 것들 어떤 종류의 장소를합니까? 성능 문제를 조사하고 싶습니다

마찬가지로 포인터는 무엇입니까? 그것은 당신을 깊게 파고들 것을 가르쳐줍니다 Pg_stat 테이블 일반적으로 어떤 색인을 찾을 수 있도록 도와줍니다 인덱스, 테이블에 대한 통계 IO 통계, 진공 통계 Pg_stat_statements는 느린 쿼리를 찾는 데 도움이되며, EXPLAIN ANALYZE를 사용하거나 사실 더 좋을 것입니다 EXPLAIN ANALYZE 버퍼가 어떤 종류의 IO인지 확인하십시오

그래서 그것은 얼마나 많은, 이 검색어와 마찬가지로 조회수 비율은 얼마입니까? 그 중 얼마나 많은 것들이 디스크를 통해 가져와야하는지, 그리고 마지막으로 pg_stats, pg_class를 사용할 수 있습니다 좋은 근사를 얻으려고 Postgres가 귀하의 데이터에 대해 어떻게 이해하는지 이해하십시오 나는 말할 마지막 한가지가있다 그래서 당신이 그 소식을 듣지 않았다면, Citus 데이터는 Microsoft에서 인수했습니다 그래서 우리는 실제로 작업하고 있습니다

Azure에서 Citus를 시작했습니다 관심있는 사람이 있으면 시터스를 보면서 Azure에서 사용할 수 있습니다 당신은이 링크에 가서 흥미를 표현할 수 있습니다 우리는 당신을 그 고리에 계속 묶을 것입니다 그리고 그게 내 이야기 ​​야

나는 2 초 남았고 그래서 제 시간에 맞았습니다 (군중 박수)

TechnoSession – How PostgreSQL is equipped for the new age Digital Initiatives

안녕하세요, Ashnik의 TechnoSession 세션에 오신 것을 환영합니다 오늘 특별한 손님이 생겼어

오스카는 나와 함께 여기있다 싱가포르 오스카에 오신 것을 환영합니다 안녕하세요 모두 EDB에 합류하기 전에 대기업과 IT 혁신 프로젝트, 500 대 기업 Deloitte Consulting에서 10 년 동안 대규모 IT 구현 방법을 배웠습니다 우리가 그 당시 클라이언트 – 서버였던 변형 프로젝트 대규모 컨설팅 회사 이것은 내가 말하는 첫 번째 주요 프로젝트 다 공간에 들어간 첫 번째 클라이언트 – 서버 응용 프로그램을 만들었 기 때문에 우리는 거기에서 우리의 백엔드 네트워킹 백본으로 거대한 위성 네트워크를 사용했습니다 나는 가서 자신의 전문 서비스 회사를 시작했다

18 년 동안 그때 내 친한 친구 에드 보이 야안 (Ed Boyajian)과 내가 전에 생각한 사람이 당신의 세션에있었습니다 나에게 전화를 걸어 엔터프라이즈 DB에서 그의 컨설팅 부문을 높이려고했다 내가 EDB를 웹 스케일에 실제로 데려 올 수있게 도와달라고 부탁했다 환경 때문에 지난 2 년 동안 고급 서버를 성장 및 변경하는 데 보냈습니다 엔터프라이즈 DB 고객이 두 서버 모두에 고급 서버를 가져올 수 있도록 지원 글로벌 2000 대 기업을 위해 전 세계의 사설 클라우드 및 VM을 사용하므로 오늘 이야기 할 내용 오픈 소스가 실제로 어떻게 확장되는지는 우리가 고객이 볼 수없는 것입니다

오픈 소스가 오픈 소스를 채택하는 방법을 묻는 이유에 대해 묻는 질문이 많습니다 내 기업의 필요에 대한 근원이지만 오스카가 말한 진짜 다음 질문은 방법에 대해서뿐만 아니라 오픈 소스로 얼마나 멀리 그리고 얼마나 멀리 갈 수 있는지 기술은 특별히 Postgres 데이터베이스를 사용합니다 오늘 커버 할 예정 이니, 가장 중요한 질문들에 대해 물어 보겠습니다 고객은 왜 오늘 컨테이너에 내가 왜 우리가 걸어가는지 이유를 알고 있습니다 많은 고객이 가상화 VM을 사용하는 데 많은 시간을 할애하고 있습니다

데이터 센터를 VM으로 옮기는 프로젝트를 완료했습니다 용기에 대해 이야기하고 말하기 나는 당신이 그것에 대해 매우 열정적이라는 것을 알고있다 이해하고 싶어 오, ​​사실 나는 흥미롭게도 컨테이너를 볼만큼 충분히 기술 채택이 아닌 비즈니스 변화입니다 정말로 비즈니스의 두 부분에서 실제로 채택 된 IT 부서에서 CFO의 IT 회사에서 나오는 첫 번째 사건과 전세계 기업들은 지난 10 년 동안 VMware 가상화에 투자했습니다

머신 가상화 그래서 그들은 지금이 거대한 하드웨어 포트폴리오를 가지고 있습니다 이를 지원하고 CFO는 활용도를 향상시키는 방법을 모색 중입니다 그러므로 컨테이너, 쿠베 넷네, 오픈 시프트는 그들에게 밀도를 만드는 능력을 부여합니다 기존 인프라 스트럭처를 두 번째 그룹은 건축가입니다 왜? 건축가가 기술을 기반으로 의사 결정을 내리고 있다고 생각 하겠지만 실제로는 그렇지 않습니다

컨테이너가 건축가에게주는 것은 거버넌스와 준수에 관한 것입니다 kubernetes에 배치 된 것을 중심으로 통치 원리를 감쌀 수있는 능력 환경 정책 및 컴플라이언스 코드를 사용하여 보안 및 확장형 애플리케이션 그래서 짧게 말해서 비록 당신이 소개하더라도 컨테이너를 모두 교체하지 않을 것입니다 VM에 대한 투자가 낭비되지 않고 고객이 걱정할 필요가 없습니다 대체 전략은 아니지만 개선 전략입니다

오늘 100 대의 VM을 실행한다고 가정 해 보겠습니다 좋은 응용 프로그램을 만들고 1000 개를 실행할 수있는 환경을 만드십시오 기본 인프라를 변경하지 않고도 애플리케이션을 실행할 수 있습니다 하지만 고객이 가장 많이 묻는 다음 큰 일은 '얘들 아 얘기 했어 데이터베이스에 관한 것이고 컨테이너에 데이터베이스를 두는 것이 좋은 전략입니까? ' 그건 좋은 질문이라면 1 년 전에 나에게 물어 보았을 것이다

아마도 가상 컴퓨터에 데이터베이스를 남겨 두지 말았을 것입니다 왜? 1 년 전에 우리가 지금 믿는 것의 성숙이 옳은 길입니다 kubernetes 내에서 상태 저장 세트 인 컨테이너를 구현합니다 고집 보관함, 쿠베넷, OpenShift 내의 저장소, 이제는 성숙하지 않았습니다 주류 그들은 4 개 또는 5 개의 출시 및 최신 컨테이너 네이티브 스토리지 오케스트레이션의 진화와 혁신 마침내 성숙해졌으며 IBM VMware와 같은 회사가 있습니다

모두 컨테이너가 네이티브 스토리지 인터페이스를 구축하여 데이터베이스가 기본 저장소를 올바르게 사용하여 저장소가 다음과 같이 복제되는지 확인하십시오 백업을 위해 스냅 샷을 생성 할 수 있어야했습니다 우리가 데이터베이스를 시작한 세계에서 더 이상 살지 않는 스토리지 환경 컨테이너와 귀하의 데이터가 장기간 지속될 수 있기를 바랍니다 밑줄 친 인프라에 의해 보장 받으면 이것이 건축가를위한 많은 변화 또는 다른 접근법과 나는 그것으로 되돌아 올 것이다 질문이 있습니다

이전에 또 다른 질문이 있습니다 고객 마음 거기에 서비스로 데이터베이스에 대해 많이 얘기하고있다 얼리 어답터는 실험으로 사용하는 고객이 있습니다 개발자는 RDS와 같은 것을 사용하고 있지만 고객들은 이제 이것을 요구하고 있습니다

질문하거나 실제로 눈을 떼지 마십시오 에 대한 서비스로서의 데이터베이스입니까? 생산 환경은 여기에 있습니다 그것은 우리가 찾은 당신의 기업에 달려 있습니다 찾고 있거나 제어하는 ​​기업입니다 RDS와 같은 서비스 Azure 데이터베이스와 같은 서비스는 고객에게 제어를 제공하지 않기 때문에 그들은 SLA에서 고객 서비스 시간을 제공해야합니다

그래서 그들은 원하지 않습니다 고객에게 ec2 인스턴스에서 데이터베이스를 실행할 수있는 종류의 제어권을 제공하십시오 전혀! 그러나 그것들은 우리가 통제하는 고객이며 그렇지 않습니다 반드시 RDS 세계에 빠지면 그것은 당신에게 당신의 능력을 자신이 소유하지 않은 환경에서 프로덕션 데이터베이스 인프라는 필요에 따라 확장 할 수 있지만 반드시 데이터베이스를 성장시켜야하기 때문에 더 저렴한 방법 일 필요는 없습니다 기본 저장소가 인스턴스 크기보다 커집니다

더 비싸게되고 당신이 높은 주위에 점점 더 많은 요구 사항을 얻을 때 가용성 장애 복구 탄력성 가상 인스턴스의 추가 시작 인프라를 지원하기 위해 인프라에 비용을 추가하고 있습니다 응용 프로그램의 종류 그래서 거기에 많은 고려 사항 고객 절대적으로 결정하지만 그것은 일어나고 EDB 측에서는 EDB가 존재한다는 것을 알 수 있습니다 퍼블릭 클라우드가 아니라면 채택했지만 고객이 데이터베이스를 서비스가 데이터 센터에 가져 오는 서비스 우리는 공공 클라우드에 채택 된 것을 보았습니다 그들의 데이터베이스를 ec2로 옮기거나 Azure로 옮기거나, 개발을 위해 Google에 제출하십시오 그것은 적합합니다

(그들은) 초기 개발에 RDS를 사용하고 테스트를 위해 우리를 사용하십시오 스핀 업을 할 수 있기 때문에 큰 도움이됩니다 문제가없는 인스턴스 우리는 점점 더 많은 입양을보기 시작했습니다 컨테이너 형태의 두 가지 형태의 사설 구름 그리고 기존의 VM 사설 클라우드에서 가장 큰 고객이 배치했습니다

3 개의 데이터 센터에서 사설 클라우드의 4,000 개 데이터베이스에 근접 그래서 우리는 우리가보기에 고객이 데이터베이스를 DBAaS 또는 PaaS 또는 서비스 형 인프라 스트럭처 우리는 그들이 어떤 방법론을 선택했는지에 대한 질문입니까? 그들은 무엇을 하는가? 하고 싶다? 그리고 그들은 그것을 어떻게 할 것인가? & 언제? 그래서 우리는 그것을 다음과 같이 보지 않습니다 미래의 미래에 올 것입니다 우리는 그것을 무언가로 봅니다 지금 여기 좋아, 처음에 얘기했을 때 얘기 했어

컨테이너 건축 할 물건이 많고 물건을 볼 필요가있다 다르게 그리고 심지어 클라우드 측은 솔루션이 건축가 또는 엔터프라이즈 설계자는이 문제에 대해 생각하기 시작해야합니다 전체 풍경은 매우 다르게? 그들의 기술에 대한 요구는 무엇입니까? 우리는 역할이 상당히 바뀌 었음을 보았습니다 구름과 컨테이너 내가 건축가로서 자라면서 우리는 하나에 집중했다

네트워크가 처리 한 애플리케이션 아키텍처에 초점을 맞춘 것 다른 누군가가 데이터베이스에 들어 왔을 때 다른 사람이 처리했습니다 이러한 데이터베이스 설계자가 가지고있는 데이터베이스로 점점 더 많은 것을 즐기십시오 구조화 방법을 이해하는 데이터 모델링을 이해하는 건축가 고객이 이동할 때 우리가 현재 발견하고있는 데이터에 액세스하는 방법 데이터 클라우드와 컨테이너로의 연결은 건축가가 데이터베이스 또는 네트워크 아래의 주제는 이해할 수 있지만 전체 스택 이러한 솔루션은 전체 스택 중심이 아니며 더 많은 것을 얻을 수 있습니다 복잡한

그게 무슨 뜻이야? 예를 들어 컨테이너는 물건을 만듭니다 운영 인력을위한 개발자에게는 더 간단하지만 인프라는 생산중인 컨테이너를 지원하는 것은 매우 복잡하며 실제 전문 지식이 필요하다 스택을 위에서 아래로 이해하는 건축가가 많기 때문에 건축가 기술에 대한 수요와 그 것들을 바라본다 우리가 다루는 또 다른 역할 세트로 나를 데려오고 그것은 DBA 역할입니다 내가 DBA로부터 들었을 때 나는 많은 불안감이 있다고 생각한다

내가 DBAaS 서비스에 대해 이야기 할 때 전형적인 DBA가 수행하는 작업이 자동화되고 있습니다 무엇이 DBA 역할이 될 것입니까? 새로운 세계? 흥미로운 질문이며 DBA 인 친구가 많습니다 나는 앞으로 DBA의 역할이 상당히 바뀔 것으로 생각합니다 우리가 알고있는 것처럼 DBA가 컨테이너에있는 서비스로서의 데이터베이스에서 실제로 컨테이너에 로그인하거나 AWS에 로그인 할 수있는 기능이 없습니다 ec2 인스턴스는 정책에 의해 허용되지 않으므로 DBA가 에 저장을 수행해야하는 데이터베이스에서이를 수행 할 수 있습니다

해당 역할과 작업이 더 이상 업무에 포함되지 않는 데이터베이스 그들은 더 많은 애플리케이션에 초점을 맞 춥니 다 그 SQL 문을 써서 제 데이터베이스가 계속해서 역할이 사라지지 않고 계속 진화하고 있습니다 우리가 전에 보았던 것을 볼 수있는 진화라고 생각하십시오 데이터베이스 관리 작업에서 응용 프로그램 중심으로 이동 애플리케이션 중심의 DBA는 데이터 모델 및 액세스 방법에 중점을두고 있습니다 귀하의 데이터를 나는 그것을 듣고 우리가 DBA와 대화를 나누었습니다

대부분의 시간을 보냈다 그래서 그것은 매우 흥미로운 통찰이었습니다 나는 우리가 이러한 경향에 대해 좀 더 이야기 할 수 있습니다 이 통찰력에 감사드립니다 정말 고맙습니다

고맙습니다

C# How to connect PostgreSql database | C# CRUD | PostGreSql Function

이 튜토리얼에서는 C #을 PostgreSQL과 연결하는 방법을 설명합니다 NpgSql 패킷 사용 및 PostgreSQL 함수 사용 새 프로젝트를 만듭니다

Instal 패킷 Npgsql 패킷 설치를 끝내기 만하면됩니다 pgAdmin으로 PostgreSQL을 시작하십시오 연결 속성보기 : 서버, 포트, 사용자, 패스 이런 연결 문자열을 정의하십시오 설치 한 PostgreSQL까지입니다 PostgreSQL 서버에 연결하기위한 NpgsqlConnection 정의 양식로드 이벤트에서 연결 초기화 필요한 구성 요소를 Label, Textbox, Button 및 Datagridview와 같이 폼에 추가하십시오 원하는 경우 속성을 사용자 정의 할 수 있습니다 데이터를 저장할 테이블을 만듭니다

예 : 학생 표 그것은 몇개의 칼럼을 포함한다 : id는 기본 키, firstname, midname 그리고 lastname이다 이처럼 아주 간단합니다 생성 된 테이블 다음에 데이터를 선택하고 테이블 함수에 데이터를 삽입하는 삽입 함수를 생성하십시오

Foglight for PostgreSQL use cases

안녕하세요 내 이름은 David Orlandi이고, 나는 포스트 그레스의 주제 전문가 Quest Software에 있습니다

이 짧은 비디오에서 나는 집중할 것이다 Foglight를 사용하여 일반적인 성능을 해결하는 방법 Postgres를 모니터링 할 때 당면한 과제 Postgres에는 몇 가지 유사점이 있지만 전통적인 데이터베이스와 함께 가용성, 성능 및 용량 관리되는 것은 고유합니다 효율적인 관리 방법이없는 회사 포스트그레스는 종종 이점을 깨닫기 위해 고심합니다 플랫폼이 제공 할 수 있습니다

신속하게 탐지, 진단 및 해결할 수 있다면 어떨까요? 실제, 가상 및 클라우드 기반 Postgres 데이터베이스 서버? 몇 가지 중요한 사용 사례를 자세히 살펴 보겠습니다 Foglight가 모니터링 성능에 가치를 제공 할 수있는 곳 Postgres에서 사례 1을 사용하여 Postgres에서 잠금을 모니터링하고 관리합니다 Postgres의 가장 가치있는 기능 중 하나 동시 ACID 트랜잭션을 지원합니다 ACID는 Atomicity, Consistency, 절연 및 내구성

이러한 데이터베이스 트랜잭션 속성 데이터 유효성을 확인하는 데 도움이됩니다 잠금을 이해하는 것이 중요합니다 활성 Postgres 데이터베이스에서 흔히 발생할 수 있습니다 이것은 Postgres가이 레벨을 사용하기 때문입니다 안전하게 구현하는 방법 중 하나로서 잠금 기능 이러한 동시 ACID 트랜잭션 최고 성능 관리에는 다음이 포함됩니다

쿼리를 인식하고 달리기에는 너무 오래 걸린다 경우에 따라 이러한 명령이 잠금 대기 중일 수 있습니다 Foglight는 이러한 상황을 파악하고 해결하는 데 도움을 줄 수 있습니다 이것은 Foglight의 데이터베이스 홈 페이지입니다 상단에는 번호가 있습니다

다양한 DBMS를 나타내는 데이터베이스 타일 Foglight가 모니터링을 지원하는 유형 Postgres 타일을 클릭하면 Postgres 인스턴스를 격리하기위한 것입니다 이제, Postgres 용 Foglight는 몇 가지 out-of-the-box를 제공합니다 시각적 경보 기본 임계 값으로 사전 구성되어 있으며, 하지만 그들은 사용자가 구성 할 수 있습니다

알람에 액세스하고 관리하려면 상자를 선택하십시오 관리하려는 인스턴스 옆에 있습니다 적절한 Foglight 권한을 가지고 있다면, 이 Configure Alarms 버튼이 활성화됩니다 그것을 선택하십시오 Foglight에서 사용할 수있는 Postgres 경보 중 하나 여기서 잠재적 교착 상태 문제라고합니다

왼쪽에서 선택하면 여기에 속성이 나타납니다 중앙 지역에 이 파란색 링크를 사용 또는 사용 중지 할 수 있습니다 보기 또는 수정하려면 경보 강화 버튼을 클릭하십시오 심각도 수준 및 관련 메시지 이제이 경고는 불규칙한 자물쇠가있는 경우에 발생합니다

교착 상태 제한 시간보다 오래된 잠금 대기 중 환경 Foglight가이 정보를 가져오고 있습니다 Postgres보기에서 pg_locks 왼쪽 상단에있는 이동 경로를 클릭하십시오 데이터베이스 홈 페이지로 돌아갈 수있게 해줍니다

인스턴스 이름을 클릭하기 만하면됩니다 개요 페이지에 액세스하십시오 개요 페이지에서 세부 정보 잠금으로 이동합니다 Locks Waiting 스피너 또는 Locks를 선택하여 페이지 옵션을 선택하십시오 대기중인 잠금 장치가 있으면 이와 비슷한 메시지가 표시됩니다

표시되는 데이터에는 프로세스 ID, 사용자, 쿼리 수행 한 쿼리 시작 시간, 자물쇠가 승인되었는지 여부 교착 상태 인 경우 하나 이상이 부여되지 않았습니다 이 문제를 해결하려면 프로세스 ID, 상단의 Connections 페이지 옵션을 선택하십시오 해당 프로세스 ID를 찾으십시오 그리고 연결 페이지의 맨 오른쪽에, 관리 아이콘을 선택하십시오

이제 사용자가 Postgres 관리자 권한으로 구성됩니다 여기에서 검색어를 강조 표시 할 수 있습니다 취소하거나 연결을 종료하십시오 Case 2를 사용하여 Postgres에서 쿼리 성능을 최적화합니다 DBA의 주요 작업 중 하나 실적이 저조한 검색어를 찾아서 최적화하는 것입니다

이것은 종종 사소한 일이 아닙니다 너무 많은 데이터를 정렬하고 문제를 찾아 낼 수 있습니다 Foglight는 Postgres 쿼리에 대한 경고를 제공합니다 의심스러운 행동을합니다 앞의 유스 케이스에서 볼 수 있듯이, 알람 인터페이스로 이동하는 것은 이와 같이 수행됩니다

인스턴스 옆의 확인란을 선택하고, Configure Alarms (경보 구성) 버튼을 선택합니다 관리 및 최적화의 사용 사례 쿼리 성능, 두 가지 특정 Foglight 알람 쿼리에 대한 신속한 통찰력 제공 더 자세히 볼 필요가있을 수도 있습니다 이는 진술에 대한 높은 평균 응답 시간입니다 이 알람은 평균 대기 시간 성명서를위한 상당한 시간 그것의 역사적인 평균의 그것을 초과하십시오, Postgres Buffer Hit Percentage 테이블을 포함합니다 이 경보는 버퍼가 히트 될 때 트리거됩니다

테이블의 비율이 낮습니다 이제 여기에서 Foglight 데이터베이스 홈으로 돌아갑니다 breadcrumb 흔적을 클릭하여 화면 왼쪽 상단에 인스턴스 이름을 클릭하여 개요 페이지로 이동하십시오 개요 페이지에서 명세서를 클릭하십시오 링크를 클릭하여 Statements 페이지로 이동하십시오

이제 더 오랜 시간이 걸리는 쿼리를 찾고 싶을 것입니다 히트가 적은 문장을 실행하거나 찾는다 백분율은 일반적으로 결과입니다 장기 실행 진술 Postgres는 데이터 액세스 패턴을 추적합니다

자주 액세스하는 데이터를 캐시에 보관합니다 약 99 %의 캐시 적중률을 유지하는 것이 가장 좋습니다 비율로 사용 가능한 캐시 늘리기를 고려하십시오 상당히 낮았다 이제 쿼리를 선택하려고합니다

명세서 세부 정보 페이지로 이동하십시오 페이지 하단에는 설명 계획을 요청하는 옵션 쿼리 단계를 더 잘 이해하기 위해 그리고 각 단계가 튜닝 목적을 위해 얼마나 오래 걸리고 있는지 설명과 통계 재설정 Postgres 관리자 권한이 필요합니다 이제 추가적으로 인덱스를 확인할 수 있습니다 연관된 테이블에서 다른 테이블 페이지

그 빵 부스러기 흔적을 다시 사용하겠습니다 테이블 페이지에 대한 테이블 링크를 클릭하십시오 이제 변경 사항이있는 경우 테이블 구조 나 쿼리에 실적을 테스트 할 준비가되었습니다 명령문 추적 통계를 재설정 할 수 있습니다 새로운 성능 데이터를 표시 할 수 있습니다

여기에서 오른쪽에있는 관리자 버튼을 선택하십시오 그리고 Stat Reset 및 Perform Operation을 선택하십시오 Postgres에서 디스크 공간 사용을 모니터링하는 케이스 3을 사용합니다 데이터베이스가 다 소모되면 많은 일이 발생할 수 있습니다 디스크 공간

그들 중 누구도 좋지 않습니다 DBA는 데이터베이스를 모니터링하는 것이 중요하다는 것을 이해합니다 중요한 비즈니스 프로세스가 중단되지 않은 Foglight는 그 공간을 모니터링함으로써 안심할 수 있습니다 임계 값을 사전에 경고 잠재적 인 공간 문제

Postgres 용 Foglight는 Database라는 경보를 제공합니다 디스크 공간이 부족합니다 계산 된 평균 테이블 공간 증가 비율은 기존의 것을 사용할 것입니다 15, 30 또는 60 일 이내에 하드 드라이브의 공간, Foglight가 경보를 발령합니다 명심하십시오

Foglight를 통한 호스트 모니터링이 필요합니다 인프라 카트리지를 계산할 수 있어야합니다 사용 가능한 디스크 공간 Foglight는 테이블 스페이스 정보를 제공합니다 이제는 테이블 스페이스 정보가 아닙니다

데이터베이스를 서비스 클라우드 환경에서 사용할 수 있으며, 정보가 사용자에 의해 관리되지 않기 때문입니다 오히려 서비스에 의해 관리됩니다 테이블 스페이스 데이터는 오른쪽 하단에 있습니다 개요 페이지의 코너 여기서 테이블 스페이스 OID, 이름, 소유자, 총 테이블 공간 크기

테이블 공간 이름을 선택할 수 있습니다 또는 드릴 다운 할 테이블 스페이스 링크를 위로 선택하십시오 테이블 공간 페이지로 이동하십시오 여기서 추가 정보는 디스크 공간을 포함합니다 분배 및 시간 경과에 따른 테이블 공간 크기 우주 문제를 더 진단하기 위해, 먼저 데이터베이스와 테이블을 결정한다

테이블 공간을 사용합니다 그런 다음 데이터베이스 및 테이블의 증가를 기록하십시오 시간이 지남에 따라 범위를 좁히는 데 도움이되는 요금 그 증가에 책임이있는 사람을 결정하십시오 테이블 스페이스 증가 테이블 공간은 종종 여러 데이터베이스와 테이블을 호스트 할 수 있습니다 이렇게하려면 데이터베이스 또는 테이블로 이동하십시오

페이지 상단의 링크를 클릭하십시오 이 예제는 테이블 용입니다 그러나 네비게이션은 데이터베이스와 동일합니다 예기치 않은 성장 가능성 시스템이 얼마 동안 진공 청소기로 청소되지 않았다는 것입니다 큰 테이블을 찾으십시오

그런 다음 죽은 튜플이 많은지 확인합니다 Live / Dead Tuples 그래프를 통해 확인할 수 있습니다 Postgres에서 튜플은 논리적 인 행 표현입니다 행 또는 튜플은 삭제 될 때 실제로 제거되지 않습니다 오히려 단순히 삭제 표시 만됩니다

이들은 죽은 튜플로 간주됩니다 진공은 행정 과정이다 이 죽은 튜플이 지워지는 파일에서 데드 스페이스를 제거합니다 Foglight를 사용하면 사용자가 현재 Postgres를 볼 수 있습니다 개요 페이지를 통한 자동 진공 구성 뿐만 아니라 수동 진공을 시작합니다

진공을 수행하려면 관리자 아이콘을 선택하십시오 테이블 페이지의 맨 오른쪽으로, 또는 Databases 페이지를 열고 Vacuum을 선택하십시오 자동 분석이 완료되지 않은 경우 구조가 바뀌 었습니다 진공 및 분석 선택 또한 볼 수 있습니다

시스템이 최근 오른쪽 하단의 자동 진공 청소기로 청소 된 경우 다시 한번, 사용자는 반드시 Postgres 관리자를 가져야합니다 이러한 작업을 수행 할 수있는 권한 이러한 사용 사례는 포괄적 인 성능의 일부입니다 모니터링, 경고, 진단, Foglight for Cross-Platform Databases에서 발견 된 분석을 포함합니다

교차 플랫폼 데이터베이스 용 Foglight 구현 직업을 쉽게 만들고 도움을 줄 것입니다 건강과 성과 보장 전체 데이터베이스 환경 더 자세한 정보가 필요하십니까? 이 슬라이드의 정보를 살펴보십시오 이 링크를 통해 퀘스트 방문에 액세스 할 수 있습니다 교차 플랫폼 데이터베이스 용 Foglight 페이지, Postgres 용 Foglight 및 Quest 커뮤니티 Foglight를 직접 사용해보고 싶다면, 완전한 기능의 30 일 평가판 링크를 찾을 수 있습니다

Instalar Postgresql en Ubuntu 18 04

Linux 우분투 서버에 PostgreSQL 설치 1804 LTS Daniel Bojorge Sequeira에 의해 정교화 됨 업데이트 저장소 sudo apt update PostgreSQL-10이 리포지토리에 있는지 확인하십시오

sudo apt-cache search postgresql-10 찾으면 설치를 시작합니다 sudo apt install postgresql-10 설치를 시작하려면 Y 또는 S 클러스터 이름이 메인이고 포트가 5432 인 Postgresql 10 서비스 상태 DOWN 설정 파일 편집 모든 주소를 청취하십시오 서비스 포트 확인 인증 설정 서버에 액세스 할 서버의 IP 또는 네트워크 세그먼트를 추가해야합니다 이 경우 로컬 액세스 12700

1/32를 설정합니다 MD5 방법은 암호를 지정해야합니다 TRUST 메서드는 암호를 요구하지 않습니다 예를 들어, TRUST에서 로컬 연결을 허용합니다 재시작 서비스 sudo 서비스 postgresql restart 서비스가 실행 중입니다

포스트그레스 사용자를위한 암호 설정 암호 쓰기 및 확인 콘솔 닫기 및 준비 q 이 시점에서 이제 Linux에 PostgreSQL 10을 설치하고 기본적으로 인증을 구성하고 설정할 수 있습니다 다른 경우에는 더 많은 구성 요소가 표시됩니다 가르치는 것이 가장 좋은 방법입니다

Create A Google Cloud PostgreSQL Database For Google Sheets & Google Analytics Data Reporting

안녕하세요이 동영상에서는 Google Cloud를 신속하게 설정하는 방법을 알려 드리겠습니다

PostgreSQL 데이터베이스 따라서 Google 스프레드 시트, Google 애널리틱스 및 같은 데이터 소스를 섭취 할 수 있습니다 Holistics와 같은 플랫폼에서 비즈니스 인텔리전스보고 및 분석을위한 데이터베이스 그럼 해보자! Google Cloud 웹 사이트에 가입하거나 로그인하고 콘솔로 이동하십시오 드롭 다운 메뉴에서 SQL 제품을 선택하십시오

이제 PostgreSQL 데이터베이스 인스턴스를 설정할 준비가되었습니다 PostgreSQL을 데이터베이스 엔진으로 선택하십시오 인스턴스를 초기화하는 데 시간이 좀 걸릴 것이므로 화면을 떠나지 말고 몇 분 이제 PostgreSQL 인스턴스 설정을 마칠 수 있습니다 인스턴스 이름을 지정하고 암호를 설정하십시오

위치에 가장 가까운 데이터 센터가있는 Google Cloud 지역을 선택하고 영역을 선택하십시오 네가 원한다면 구성 옵션에서 비용을 절약하기 위해 작은 기계 유형을 선택할 수 있습니다 또는 자동으로 설정되도록 두어도됩니다 이것들은 PostgreSQL 인스턴스를 만드는 데 필요한 기본 단계입니다 생성을 클릭하면 인스턴스가 완전히 설정되므로 잠시 시간이 걸립니다

그것은 몇 분 동안 실행됩니다 다음 단계는 이제 PostgreSQL 데이터베이스를 생성하고 그것을 Holistics 데이터에 연결하는 것입니다 플랫폼을 통해 비즈니스 인텔리전스보고를 시작할 수 있습니다 이전 인스턴스 설정을 조정할 수있는 편집을 선택하십시오 우리는 이제 Holistics IP 주소를 허용하여 Holistics 네트워크에 액세스 할 수 있도록해야합니다

PostgreSQL 데이터베이스에 Add network (네트워크 추가)를 선택하면 여기에 대한 Holistics IP 주소를 복사하여 지나칠 수 있습니다 화이트리스트 Holistics에 새로운 데이터 소스를 추가하십시오 데이터베이스 유형 드롭 다운 메뉴에서 PostgreSQL을 선택하여 당신이 필요로하는 분야

Whiteselist에 필요한 Holistics IP 주소는 오른쪽에 나열되어 있습니다 따라서이 각각을 복사하여 Google Cloud에 붙여넣고 새 네트워크로 추가하십시오 인스턴스의 새 설정을 저장하고 이러한 변경 사항이 업데이트 될 때까지 기다리십시오 마지막 단계는 사용자 계정과 PostgreSQL 데이터베이스 자체를 생성하는 것입니다 인스턴스를 선택하고 사용자 탭을 클릭 한 다음 사용자 계정을 만듭니다

사용자와 암호를 선택하고 이러한 세부 사항이 PostgreSQL 데이터 소스에 연결된다는 것을 기억하십시오 나중에 홀리스틱스를 위해서 데이터베이스를 선택하고 데이터베이스 작성을 클릭 한 후 새 데이터베이스에 이름을 지정하십시오 Holistics에 연결하려면이 기능이 필요합니다 이제 PostgreSQL 데이터베이스를 Holistics에 연결하는 데 필요한 모든 정보를 얻었습니다 이 데이터 소스에 GCP-Postgres와 같이 쉽게 기억할 수있는 표시 이름을 지정해 보겠습니다

이 인스턴스에 연결하는 데 필요한 PostgreSQL IP 주소는에서 찾을 수 있습니다 개요 탭 이 공용 IP 주소를 복사하여 Holistics 양식에 붙여 넣으십시오 데이터베이스 이름은 데이터베이스 탭, PostgreSQL 데이터베이스에서 찾을 수 있습니다 우리가 이전에 만들었던 것 마지막으로 사용자 이름과 암호는 이전에 생성 한 사용자 계정에서 가져옵니다

연결을 테스트 할 수 있으며 제대로 작동하는지 확인한 후에는 이 데이터 소스를 저장하십시오 우리는 PostgreSQL 데이터베이스의 상태가 전체에서 올바르게 작동하는지 확인할 수 있습니다 데이터 소스 목록 이제 Google에서 수집 한 데이터보고 작업 및 데이터 준비 작업을 실행할 수 있습니다 Analytics 및 Google Spreadsheet 데이터 및 내보내기 및 배달 보고서 자동화 이제 우리는 훨씬 더 자세하게 이러한 작업을 수행하는 방법을 보여주는 많은 다른 비디오를 가지고 있습니다

그래서 나는 여기서 너에게 빠른 버전을 줄거야 Holistics를 사용하면 PostgreSQL과 같은 관계형 데이터베이스로 데이터를 쉽게 임포트 할 수 있습니다 Google 애널리틱스, Google 스프레드 시트, CSV 파일과 같은 소스를 가져올 수 있습니다 Google 드라이브 폴더, 다른 데이터베이스 테이블 등에서 가져올 수 있습니다 Google 스프레드 시트 데이터에서 가져 오기를 자동화하려면 Google 스프레드 시트의 URL 링크를 복사하십시오

가져 오기 소스로 Google 스프레드 시트를 선택하십시오 URL을 붙여넣고 소스 유효성 검사를 클릭하십시오 Google 스프레드 시트를 처음으로 Holistics에 연결하는 경우 Google 인증을하십시오 Google 시트가 올바르게 읽혀 지므로 이제 Google Cloud PostgreSQL을 선택하십시오 스키마 이름을 선택하고 테이블 이름을 지정하십시오

이제 가져 오기 작업의 가져 오기 모드 및 데이터 형식을 구성 할 수 있습니다 가장 유용한 것은 데이터를 얼마나 자주 가져올 지에 대한 일정을 설정할 수 있습니다 Google 스프레드 시트에서 PostgreSQL 데이터베이스로 가져옵니다 필요한 몇 분 간격으로 몇 분마다 이제이 구성의 유효성을 검사하여 지금 또는 일정대로이 작업을 저장하고 실행할 수 있습니다

실행되는 가져 오기 작업의 세부 정보는 로그에 저장되므로 문제 해결을 위해 참조 할 수 있습니다 오류가 발생할 경우 PostgreSQL 데이터베이스로 가져온 데이터를 사용하여 이제는 몇 걸음 우리는 질의를 보내서이 표를 분석 할 수 있습니다 편집기에서 실험하기위한 열과 필드 Holistics 내부에서 수행 할 수있는 다른 많은 기능이 있습니다

예를 들어 자동 가져 오기 귀하의 PostgreSQL 데이터베이스에 Google Analytics 데이터를 결합하여 귀하의 데이터와 결합하십시오 다른 출처 YouTube의 YouTube 채널을 방문하여 Holistic에서 할 수있는 다른 것들을 찾아보십시오 데이터 플랫폼 홀리스틱 팀에서 곧 보게 될 것입니다

PostgreSQL (Postgres) – Installation & Overview |¦| SQL Tutorial |¦| SQL for Beginners

안녕하세요 뷰어 나는 당신을 당신의 새로운 친구에게 소개 할 것이기 때문에 당신이 오늘 나와 함께 할 수있어서 기쁩니다

PostgreSQL 이 오픈 소스 데이터베이스는 지상과 저기에 폭풍에 의해 세계를 지배하고 있습니다 클라우드에서 그것은 당신에게 무료의 낮은, 저렴한 가격에 대한 고급 관계형 데이터베이스를 제공합니다 무료로 현지 통화로 변환하면 무료입니다 막대기로 그걸 이길 수는 없지, 그렇지? 나는 옳다

잠시 시간을내어 그 이름을 쳐다 보자 이것은 "Post gres SQL"이라고 발음하지만, 대부분의 사람들은 단순히 "Post gres"라고 말합니다 짧은 왜냐하면 정직하게 – 누가 음절을 쓸 시간이 있니? 우리는해야 할 일과 저장할 데이터가 있습니다 시작하려면 잠시 시간을내어 이름을 조금 더 보자

"post"라는 접두사는 "gres"앞에 무엇인가가 왔음을 암시합니다 그리고 이것은 사실입니다 이름을 이해하기 위해서는 1970 년대까지 거슬러 올라가야합니다

장소? 버클리, 캘리포니아 시간? 1970 년대 불행한 유행이 많고 세계적인 수준의 대학이 있습니다 과학자들은 "잉그레스 (Ingres)"라는 연구 프로젝트에 열심입니다 많이 기뻐했다

그러나 완벽하지는 않습니다 그래서 1980 년대에 일부 프로젝트를 수정하기위한 후속 프로젝트가 시작되었습니다 Ingres의 문제점 "ingres"이후에 나온 것이므로이 프로젝트는 "POSTgres"라고 불렀습니다 컴퓨터 과학자 인 당신은 아주 영리합니다

그리고 1990 년대에는 더 많은 개선이 이루어졌습니다 "POSTQUEL 쿼리 언어"대신 SQL을 지원하도록 데이터베이스가 업데이트되었습니다 폭풍우에 의해 세계를 잡고 있었다 PostgreSQL이 탄생했습니다 더 기뻤습니다

그리고 다운로드 중 Postgres를 설치하려면 공식 웹 사이트 "postgresqlorg"를 방문하십시오 이 페이지를 방문하여 상황이 다른 것처럼 보일 경우 당황하지 마십시오 웹 사이트가 바뀌면 변화를 두려워해서는 안됩니다 변화가 무서운 경우가 아니라면 두려워해야합니다 다운로드를 클릭하십시오 그리고 사용중인 운영 체제의 버전을 선택하십시오 EnterpriseDB 설치 프로그램을 사용하여 설치 절차를 시연합니다 나는 너를 모른다 그러나 나는 그 가장자리에서 살기를 좋아한다 그래서 나는 가장 많이 선택할 것이다

최근 버전의 Postgres 여기에 나열된 버전보다 최신 버전이 표시되면 미래의 뷰어를 축하합니다 Postgres를 설치하기 전에 서스펜스를 구축하려면 시간을 들여서 처음에는 Postgres 홈 페이지를 방문했습니다 그게 미친 시간 이었어 코끼리가 도처에있다

왜 이런거야? 우선, 코끼리는 아름답고 놀라운 동물입니다 크고 위엄있는 그러나 주된 이유는 "코끼리는 결코 잊지 않는다"는 것입니다

그리고 데이터베이스를 잊어 버리지 않으려면 마스코트에 대한 좋은 선택 잘 했어, Postgres

이제 Postgres를 설치할 준비가되었습니다 설치 프로그램을 실행하십시오 pgAdmin 구성 요소를 별도로 설치하므로 해당 확인란의 선택을 취소하십시오 엔지니어는 이중의 존경심을 얻으므로 확실히 명령 줄 도구를 설치하려고합니다 명령을 입력 할 때와 GUI를 사용할 때를 가리 킵니다

하지만 걱정하지 마 우리는 pgAdmin GUI를 곧 설치할 것이므로 아무도 찾고 있지 않을 때 사용할 수 있습니다 Postgres 데이터를 OS 드라이브와 별도의 하드 드라이브에 저장하겠습니다 하드 드라이브가 하나뿐이라면 당황하지 마십시오 해로울 것이 없습니다

이제 중요한 결정을 내려야합니다 수퍼 유저 비밀번호를 선택하십시오 "암호"가 아닌 것이 좋습니다 수퍼 유저가 되려면 수퍼 패스워드를 선택해야합니다 그런 다음 서버의 포트를 선택할 수 있습니다

Postgres는 기본적으로 5-4-3-2를 사용하는데, 이는 우리가 사용할 것입니다 오, 더 많은 질문 기본 로케일

다음 것 끝은 시야에있다 모든 것이 올바른지 확인하고 "다음"을 다시 클릭하십시오 너 지금 농담하는 거지… 다음 것… 이것은 내가보고 싶은 것입니다 상태 표시 줄, 빠르게 변화하는 텍스트 및 몇 초 안에 새로운 데이터베이스의 약속 또는 아마도 몇 분 참을성이 없어서 스택 빌더 옵션을 선택 취소 할 수있는 권리가 있습니다 우리의 데이터베이스를 구축하기 시작하십시오 하지만 먼저 Postgres GUI 도구를 설치합니다

우리가 설치할 것은 "pgAdmin"입니다 "pg"가 무엇을 의미하는지 궁금 할 것입니다 꽤 좋은 내 생각 엔 이 도구를 다운로드하려면 "pgAdminorg"로 이동하십시오

나는 코끼리를 본다 그래서 우리는 올바른 곳에 있어야한다 여기에서 우리는 훈련을 안다 다운로드를 클릭하십시오 운영 체제를 선택하십시오 대담하고 최신 버전 사용 일반적으로 새 소프트웨어를 설치할 때처럼 "다음"을 클릭하십시오 모든 대문자로 많은 텍스트가있는 라이센스 계약 나는 항상 나의 CV에 비슷한 경고를 포함한다 설치하십시오 이제 Postgres 데이터베이스와 pgAdmin 도구를 모두 설치 했으니 이제 보자 우리 노동의 결실 pgAdmin 도구를 시작하십시오

축하해 우리는 시작 선으로 만들었습니다 이제 pgAdmin 인터페이스 둘러보기를 시작합니다 pgAdmin 인터페이스는 초대를 받아야합니다 Postgres 코끼리는 우리에게 따뜻한 마음으로 "환영합니다"라고 말합니다

맨 위에는 도구 모음이 있습니다 아래에는 대시 보드가 이미 선택된 여러 탭이 있습니다 시작하는 데 도움이되는 링크가 있습니다 새 서버 만들기 pgAdmin GUI 구성 도움을 받기위한 자료

내가 제일 좋아하는 것은 PostgreSQL 사용자 매뉴얼이다 3,500 페이지가 넘는 페이지에서 매혹적인 매뉴얼입니다 400 시간 밖에되지 않는 오디오 북 버전도 있습니다 나는 마지막을 위해 최선을 모았습니다 사이드 바

맨 위에는 "서버"라는 "서버 그룹"이 있습니다 이름에서 알 수 있듯이 "서버 그룹"은 서버 구성을위한 컨테이너입니다 "서버"라는 이름 뒤에 "1"이 있으면 현재 서버가 하나 있음을 알 수 있습니다 이 그룹 기본 서버는 "PostgreSQL 11"이며 코끼리 아이콘 상태가 부여됩니다

이 서버를 확장하면 추가 범주가 표시됩니다 데이터베이스 로그인 및 그룹 역할 그리고 Tablespaces 우리는 지금까지 Postgres 데이터베이스를 보았습니다 그러니 정신이 산만하지 않게합시다 "Databases"를 확장하면 "postgres"데이터베이스가 나타납니다 "template0"및 "template1"이라는 데이터베이스를 보거나 보지 못할 수도 있습니다

당신이 그들을 보게되면, 그들을 내버려둬 라 날 믿어… 나는 한때이 템플릿 데이터베이스를 창에서 삭제 한 사람 (Michael Harrison)을 알고있었습니다 그리고 레지스트리를 정리하고 데이터베이스를 재설치하는 데 상당한 시간을 소비해야했습니다 일을 순서대로 되돌리기 위해 데이터베이스를 만들려면 "데이터베이스"를 마우스 오른쪽 단추로 클릭하고 만들기 데이터베이스 를 선택하십시오

우리는 "socratica"라는 데이터베이스를 생성 할 것입니다 소유자는 슈퍼 유저 인 "postgres"입니다 이것은 다가오는 액션 영화의 제목이기도합니다 "저장"을 클릭하기 전에 "SQL"탭을 살펴 보겠습니다 이 데이터베이스를 생성하기 위해 실행될 SQL 명령을 보여줍니다

pgAdmin을 사용하여 데이터베이스를 변경할 때마다 다음을 살펴볼 것을 제안합니다 SQL 탭 SQL에 대한 이해를 높이고 유용한 코드 스 니펫을 제공합니다 스크립트 및 코드에서 사용할 수 있습니다 이제 '일반'탭으로 돌아가서 '저장'합니다

데이터베이스가 생성되었습니다 얼마나 많은 테이블이 있는지 보려면 "스키마"폴더를 엽니 다 기본적으로이 데이터베이스에는 공용 스키마가 있습니다 공개 스키마를 확장하면 구축 할 때 사용할 수있는 긴 기능 목록이 표시됩니다 귀하의 데이터베이스

가장 중요한 것은 당신의 테이블입니다 그리고 이것을 클릭하면 "socratica"데이터베이스에 현재 테이블이 없다는 것을 알 수 있습니다 그리고 그것의 외형에 의해, 의자도 없습니다 우리는 향후 비디오에서이 문제를 해결할 것입니다 이제 Postgres를 설치 했으므로 모든 사람에게 Postgres를 알릴 수 있습니다 Postgres를 설치했습니다 그러나 잠깐, 더 좋아진다 더 이상 사용자가 아닙니다

이제 수퍼 유저입니다 데이터의 세계가 저장을위한 것입니다 그러니 그 너클들을 깨고, 그 매뉴얼을 잡고, 무릎을 들어야합니다 수동 무거운 때문입니다 더 우수한 비디오를 보려면 Socratica를 구독하십시오

Kubernetes Tutorial: How to Deploy PostgreSQL on Google Kubernetes Engine (GKE)

안녕하세요 이 데모에서는 고 가용성 Postgres 데이터베이스를 설치하는 방법을 보여 드리려고합니다

Portworx와 Kubernetes Portworx를 스토리지 백엔드로 사용하기 때문에 추가로 구성 할 필요가 없습니다 Postgres의 고 가용성을 보장하는 매개 변수로, 만들 필요가 없음을 의미합니다 PostgreSQL을 상태 저장 세트로 사용하거나 다른 메커니즘을 사용하여 고 가용성을 확보하십시오 데이터베이스에 전력을 공급하는 스토리지 백엔드는 이미 가용성이 높고 중복되므로, 우리는 자동으로 데이터베이스의 HA를 달성합니다

그럼 어떻게하는지 봅시다 우리가 할 첫 번째 일은 다음과 같은 것을 만드는 것입니다 스토리지 클래스 Kubernetes에 익숙하다면 스토리지 클래스가 연관성이 있음을 알 수 있습니다 특정 스토리지 백엔드에서 우리가 생성 할 볼륨 및 볼륨 클레임을 다음 단계

이것은 Portworx 고유의 저장소 클래스입니다 모든 것이 다른 스토리지 클래스와 거의 동일하게 보이지만, 고유 한 것은 무엇입니까? 이 구성에 복제 인수라는 매개 변수가 있습니다이 경우 우리는 복제 요소를 3으로 언급하고, 이는 데이터가 Portworx 볼륨은 세 개의 노드에 걸쳐 복제 될 것이며 이는 마술입니다 Portworx는 stateful 작업 부하의 가용성을 높이기 위해 노력할 것입니다 이제 저장소 클래스를 만들어 보겠습니다 따라서 "px-repl3-sc"라는 저장소 클래스를 만듭니다

스토리지 클래스가 생기면 다음 단계는 지속적 볼륨 소유권 주장을 만드는 것입니다 이제 Kubernetes에 대한 배경 지식이 있다면 PVC가 항상 PV에 바인딩된다는 것을 알고 있습니다 영구 볼륨입니다 그러나 동적 프로비저닝 덕분에 PVC를 스토리지에 즉시 연결할 수 있습니다 이 단계를 건너 뛰고 먼저 볼륨을 작성한 다음 볼륨 클레임을 작성하십시오 우리는 스토리지 클래스를 언급하고이를 이전 스토리지와 연관시킴으로써이를 수행합니다 우리가 방금 만든 수업

또한 애플리케이션에 최소 1GB의 소유권 주장이 있음을 확인하고 있습니다 이제 방금 만든 저장소 클래스를 기반으로 PVC를 만듭니다 그래서 이것은 이미 묶여있는 1 GB의 PVC를 만들어 낼 것입니다, 그리고 이것은 개념입니다 동적 프로비저닝을 통해 볼륨 생성을 우회하여 볼륨 공간 좋아, 그 두 곳, 스토리지 클래스와 PVC로, 이제 우리는 pgSQL을 실행하는 배포의 일부 pgSQL은 사용자 이름과 패스워드를 요구하기 때문에 우리는 베스트 프랙티스를 따를 것입니다

Kubernetes 비밀을 만드는 것 이를 위해 더미 비밀번호가 포함 된 일반 마닐라 텍스트 파일을 만들 계획입니다 이 데모에 사용할 예정입니다 우리는 개행 문자를 제거 할 것입니다 그리고 나서이 파일에서 Postgres라고하는 일반적인 비밀을 생성 할 것입니다

패스 그래서, 우리가 "비밀리에 kubectl"을 할 때, 우리는 비밀 번호로 사용할 수있는 것을 보게 될 것입니다 이제는 Postgres의 실제 배포판을 만드는 것이 좋습니다 이제 YAML 정의를 자세히 살펴 보겠습니다 이것은 복제본을 하나의 배포로 구성됩니다

앞에서 언급했듯이, 우리가 백엔드 덕분에이 인스턴스를 하나의 인스턴스로 실행하는 경우에도, 우리는 여전히 HA를 달성 할 것입니다 그런 다음 우리는 방금 생성 한 비밀을 이미 일반 비밀에서 사용하려고합니다 클러스터 및 기본 이름 공간에 저장됩니다 마지막으로이 배치를 PVC로 인한 볼륨과 연관시킵니다 따라서 클레임 이름은 여기에서 생성 된 "px-postgres-pvc"를 가리키고 있습니다

차례, 스토리지 클래스를 가리키며 이것은 파트가 어떻게 백업 될지입니다 Portworx 스토리지 백엔드 자, 이제 Postgres 배포를 만들어 보겠습니다 이것은 포드의 생성을 초래할 것이므로, 이것을 watch 모드로 두자 몇 초 안에 배포의 일부인이 포드가 상태가 실행 중이면서 준비 상태로 이동하고 성공을 나타냅니다

PostgreSQL의 구성 및 배포 우리는 거기에 갈 이제 Postgres pod가 실행되었습니다 모든 것을 완벽하게 구성하고 준비가되었는지 어떻게 확인합니까? Postgres 위에 작업 부하를 실행하려면? 음, PVC 생성으로 인한 볼륨을 확보합시다 따라서이 명령을 실행하여 기본적으로이 PVC와 관련된 볼륨 이름을 가져옵니다 이를 확인하면 Portworx 백엔드에 바인딩 된 고유 한 ID가 표시됩니다

이제 우리는 데몬 세트 실행의 일부인 포드 이름을 잡을 것입니다 Portworx 그리고 우리가 kube-system 네임 스페이스에 key-value 베타 라벨을 붙이기 때문에 이름은 Portworx와 같습니다 이것은 Portworx pod의 이름을 우리에게 줄 것입니다 이 경우, 우리는 pxctl을 호출 할 명령을 실행하려고합니다

Portworx와 함께, 우리는 Postgres 데이터베이스를 지원하는 볼륨을 검사 할 것입니다 그래서 볼륨 검사를하고 볼륨 이름을 붙였습니다 꽤 흥미로운 세부 사항들을 보여줄 것입니다 그래서 이것은 Portworx 볼륨의 이름이고 동적 볼륨의 일부이기 때문에 프로비저닝을하면 PVC와 관련되어 있다는 것을 알 수 있습니다 1GB 크기입니다

다시 말하면, 이전에 정의한 PVC를 기반으로하면 3 가지 요소를 기반으로 높은 가용성을 얻을 수 있습니다 복제 SSD 디스크 중 하나, GCP 인프라의 일부 및 GKE 클러스터에 연결됩니다 복제 요소를 3으로 설정 했으므로 자동으로 사용할 수 있습니다 우리 클러스터의 모든 세 노드에서 복제 상태가 모두 녹색이며 실행 중입니다 이것은 PostgreSQL 데이터베이스뿐만 아니라 Portworx의 매우 건전한 설치를 의미합니다

다음 비디오에서는 고 가용성을 달성하는 방법을 보여 드리겠습니다 실행중인 포드를 삭제하고 모든 데이터를 그대로 재 작성하여 지켜봐 줘서 고마워

Syncing Fulcrum Desktop to PostgreSQL on Windows

Windows에서 PostgreSQL으로 Fulcrum Desktop 설정 GitHub 릴리즈 페이지에서 Setup exe 설치 프로그램을 다운로드하여 실행하십시오

스플래시 화면을 종료하고 바탕 화면에 생성 된 아이콘을 무시하십시오 우리는 명령에 대한 바탕 화면 바로 가기를 생성 할 것입니다 숨겨진 폴더를 볼 수 있는지 확인하십시오 마우스 오른쪽 버튼> 보내기> 데스크탑 (바로 가기 생성) 자세한 내용은 설명서의이 절을 참조하십시오 Shift + 바로 가기를 마우스 오른쪽 단추로 클릭하고 PowerShell 창을 엽니 다

먼저 Fulcrum Desktop이 설치되어 작동하는지 테스트 해 봅시다 유틸리티 버전 확인 우린 돌아 왔어 이제 API 토큰을 사용하여 setup 명령을 실행 해 봅시다 이를 위해서는 API 토큰이 계정 소유자에게 속해야합니다 이 단계에 해당하는 문서는 다음과 같습니다

설치가 성공적이었습니다 이제 동기화를 실행 해 봅시다 모든 조직의 Fulcrum 계정 데이터는 로컬 sqlite 데이터베이스와 동기화됩니다 이제 PostgreSQL 설정을 해봅시다 데모 용도로만 약한 암호가 사용되었습니다

자신의 관련 보안 요구 사항을 고려하십시오 설치하는 동안 PostGIS 설치 프로그램을 구하십시오 사용중인 PostgreSQL 버전과 일치하는 PostGIS 설치 프로그램을 구하십시오 PostGIS는 스택 빌더를 통해 설치할 수 있지만 다운로드 한 설치 프로그램을 사용할 것입니다 PostGIS를 설치하십시오

나는 여기에 모든 기본값을 맹목적으로 받아 들였다 이제 pgAdmin을 사용하여 새 데이터베이스를 만들고 PostGIS 확장을 활성화하십시오 이 값은 PostgreSQL 설정 중에 입력 한 암호입니다 데이터베이스를 만듭니다 데모에서는 fulcrumapp이라는 이름을 사용합니다

그러나 당신은 무엇이든 할 수 있습니다 새 db에서 다음 쿼리를 실행합니다 create extension postgis; 이제 Fulcrum Desktop 용 PostgreSQL 플러그인을 설치하십시오 위쪽 화살표는 PowerShell의 마지막 명령을 순환합니다 동기화를 다시 실행하지만 이제 PostgreSQL 인스턴스에 대한 매개 변수를 추가하십시오 그것은 효과가있다! QGIS에서 확인해 봅시다 공개 스키마에는 Fulcrum Desktop 테이블과 Fulcrum 조직의보기가 있습니다 우리는 Fulcrum 앱의 사용자 친화적 인 뷰를 레이어로 추가 할 것입니다

이 앱은 현재지도에 2 점으로 표시되는 2 개의 레코드 만 가지고 있습니다 우리의 Fulcrum 응용 프로그램에 다른 레코드를 추가하고 우리의 로컬 DB에 동기화하는 방법을 보여줍니다 매우 멋진 해변, 매우 좋습니다 이제 Fulcrum Desktop을 계속 동기화 (10 초 간격)하기 위해 –forever 플래그를 추가합니다 10 초마다 동기화됩니다 새로운 기록이 QGIS에 나타나는지 봅시다

오, 멋지다 속성 테이블에 3 개의 레코드가 있습니다 좋은! 이제 브라질에는 요점이 있으므로 동기화를 통해 변화가 생겼습니다

이제는 Fulcrum 데이터를 로컬 데이터베이스에 순간적으로 동기화하는 새로운 앱을 만들어 보겠습니다 팔! 데모 앱이 동기화되었습니다 지켜봐 줘서 고마워

Building data pipelines with Kafka and PostgreSQL

Postgres 및 Kafka를 사용하여 데이터 파이프 라인에 대한 프레젠테이션을 제공 할 예정입니다 한 달 전 PGConf EU에서 같은 프리젠 테이션을했습니다

그러나 이번에는 동료에 의해 발표되기로되어 있었지만 오늘 일찍 아팠습니다 그래서 나는 그를 대신하고있다 실제 논의를위한 의제는 데이터 파이프 라인에 관한 것입니다 카프카 (Kafka)에 대한 약간의 비법, 어떻게 작동하는지, 그리고 관련 개념들 Kafka와 Postgres를 함께 사용하는 방법 사이의 어딘가에서 인플 럭스에 관한 말 데이터 처리를 위해 카프카를 사용하는 방법 데이터 예제는 실제 생활에서 나온 것입니다 시계열 데이터와 그 조작에 관한 이벤트 나에 관한 한마디, 나는 Aiven의 공동 설립자이다

나는 또한 Postgres 애호가, 나는 Postgres를 사용 해왔다 여러 세대에 걸쳐 기여했으며 그것 주변의 오픈 소스 프로젝트 우리에 관한 한마디로, 우리는 서비스 시작으로서의 데이터베이스입니다 우리는 몇 년 전에 설립되었습니다 현재 6 개의 다른 공개 클라우드에서 고객에게 서비스를 제공하고 있습니다 서비스로 8 개의 서로 다른 데이터베이스를 보유하고 우리의 고객은 작은 체코 어 수족관 상점 Toyota 및 Comcast와 같은 거대 기업에게 우리는 기본적으로 운영되고 있으며 2016 년 초부터 서비스 그런 다음 데이터 파이프 라인에 대한 정보 이것에 대한 Wikipedia의 정의는 다음과 같습니다

파이프 라인은 일련의 데이터 처리 요소들이 연결되어 있으며, 한 요소의 출력은 다음 요소의 입력입니다 파이프 라인의 요소는 종종 실행됩니다 병렬 또는 시간 분할 방식으로 이름 파이프 라인은 물리적 인 배관 공사와 비슷한 비유에서 나온다 이제 우리는 그 정의를 벗어 났으므로, 오늘 내가 무슨 말을 할 지 알지 그러나 어쨌든, 현대의 데이터 파이프 라인은 기본적으로 방대한 양의 데이터를 수집합니다

예를 들어, Netflix는 실제로 2 조 개의 메시지를 처리하고 있다고 주장합니다 하루에 카프카 (Kafka) 클러스터에서 하루 3 페타 바이트의 데이터를 제공합니다 따라서 사람들은 방대한 양의 데이터 파이프 라인을 사용하고 있습니다 또한 요즘의 실시간 데이터 처리 파이프 라인 스트리밍을 기본으로 사용하는 구식 ETL 프로세스 대체 다른 회사의 이전에는 전체 데이터베이스를 버린 야간 배치 실제로보고 데이터베이스에 넣습니다 아마 일종의 ETL을 했어

추출, 변환 또는 기본적으로 데이터 터치 어떻게 든 귀하의보고에 실제로 반영되도록 데이터베이스,하지만 요즘 사람들은 오히려 것입니다 실시간으로 데이터를 스트리밍 방식으로 처리합니다 그래서 사람들은 정말로 24 시간을 기다려야한다고 생각하지 않습니다 오늘 얼마나 많은 책을 판매했는지에 대한 답변을 얻으려면 그들은 실제로 두 번째로 그것을 알고 싶다 똑같은 것이 적용됩니다 게임 회사를 말하자

당신은 실제로 업데이트 된 높은 점수를 원합니다 말하면, 몇 초마다 또는 뭔가, 당신 확실히 그들이 하루 동안 뒤쳐지지 않기를 바란다 어쨌든, 데이터 파이프 라인의 공통 구성 요소 일반적으로 데이터를 섭취하는 구성 요소가 있습니다 일반적으로 이것이 실제로 생존해야하는 것입니다 Firehose 스타일의 데이터 버스트

그래서, 기본적으로 많은 것들과 많은 것들 데이터가 들어옵니다 그런 다음 일반적으로 일종의 작업을 수행합니다 그것에 필터링 그래서, 당신은 당신이 알고있는 데이터를 가지고 있습니다 HTTP 액세스 로그가 있다고 가정 해 보겠습니다 및 액세스 로그에 관심이 있으십니까? 200 상태 코드, 당신은 404에 관심이 없다 또는 300 시리즈 오류 당신은 단지 200 대에 관심이 있습니다

이 시점에서 필터링 할 수 있습니다 그럼 보통은 처리의 종류는 무엇인가? 실제로 아무것도하지 않으면 데이터를 가져 오는 중입니다 그것으로 그래서 이것은 당신이 계산하고있는 것일 수 있습니다 하루에 얼마나 많은 요청을 받았는지 또는하지 않을 수 있습니다

그런 다음 일반적으로 실제로 쿼리하려는 사실 이후 어떻게 든 데이터 보통 당신이 가지고있는 데이터 어딘가에 있지만 실제로 쿼리하려고합니다 하루가 지나면 어느 시점에서, 그리고 결국에는 어딘가에 버리고 싶어 그래서 약간의 이유가 없다면 실제로 6 개월을 보자 지금부터는 실제로 귀하의 웹 사이트에 보관할 필요가 없습니다

실제 일 – 대 – 일 데이터베이스,하지만 당신은 실제로 데이터를 푸시 할 장소 그리고 나서 누군가는 결국 좋은 아이디어를 내놓을 것이다 다음 번에 데이터를 더 잘 분석하는 방법 주변에서 재 처리 할 수 ​​있어야합니다 데이터를 몇 번이고 다시 이와 같은 확장 성 요구 사항 거대한 데이터 파이프 라인 플랫폼을 운영하는 회사가 있습니다

작은 규모로 이것을하는 기업이있다 우리는 그 사이에있는 모든 것을 제공하려고 노력합니다 그런 다음 이러한 데이터 볼륨으로 인해 일반적으로 항상 시스템을 사용할 수 있기를 원한다 몇 시간 동안 내려 가면 보통 괜찮지 않아 또는 일

아마 실제로 그것을 계속 실행하고 싶을 것입니다 항상 또한, 예를 들어 Comcast와 같은 고객 중 한 명 정말로 낮은 대기 시간을 갖는 것에 매우 견고했다 그들의 데이터 처리 파이프 라인 때문에, 우리는 실제로 최고의 성능을 내기 위해 일부 조정을하십시오 이러한 데이터 파이프 라인은 일반적으로 클라이언트 라이브러리 다른 언어 및 운영 체제 용 그래서 당신은 아마도 그것이 무엇이든 지원하도록 원할 것입니다

응용 프로그램 또는 운영 체제 또는 프로그래밍 지원해야하는 언어 그러니 말하자 당신이 자바 하우스라는 것을 알고 있다면, 자바를 지원하기를 원합니다 이것은 전통적인 데이터 흐름 모델입니다 맨 위에 클라이언트가 있습니다 그럼 일종의 우리는 앱이나 기본적으로 다른 종류의 서비스를 제공합니다

데이터를 처리하고 결국 데이터가 끝납니다 일종의 데이터베이스에 들어가기 그렇다면 일반적으로 문제는 사람들이 이런 종류의 예제를 시작하십시오 예를 들어 여기에 있습니다 내가 말하길 몇 가지 데이터를 얻으려는 작은 곳 HTTP API를 사용하고 일부 Python 코드에 대해 실행하고 싶습니다

어떻게 든 데이터를 필터링 할 수 있고 결국에는 그것을 실제로 PSQL에 넣으면 실제로 당신이 실제로 말하고있는 데이터베이스 그러나 결국에는 이렇게 사진을 찍기 시작합니다 이것은 기본적으로 촬영 전과 동일한 그림입니다 6 개월 후 또는 12 개월 후, 일반적으로 이러한 일들이 시간이 지남에 따라 단순 해지지는 않습니다 이 cURL 또는 재밌는 일회용 스크립트 아프기 시작하고이 시점에서 매우 어려울 것입니다

당신이 새로운 소프트웨어를 개발할 수 있도록 시스템간에 실제적인 명확한 인터페이스가 있어야한다 그들은 기본적으로 서로를 완전히 접근하고 있습니다 제한없이 데이터를 저장할 수 있으므로 어떤 방향에서 오는 데이터 이건간에 당신이 부지런히 그것을한다면, 아마 당신은 여전히 ​​그것을 다룰 수 있습니다 그러나 그것은 여전히 ​​당신이 할 수있는 것들을 얻을 것입니다 구성 요소를 만질 때마다 명심해야합니다

아파치 카프카에 대한 한마디, 오픈 소스 프로젝트입니다 그것은 LinkedIn에서 나온 것입니다 기본적으로 스트리밍 데이터 (발표자에게 누가 익숙한 지 묻습니다) 그것은 함께 제공되는 최상위 Apache 프로젝트입니다 다른 모든 아파치가 모든 릴리스에서 투표 프로젝트는 즐거움 때문에 그렇지만 그 다음에는 다른 많은 회사에서 사용하는 AirBnBs 및 세계의 컴캐스트는 모두 Apache Kafka를 사용하고 있습니다

Fortune 지 선정 500 대 기업을 찾으십시오 카프카에 대한 좋은 점은 실제로 주어진 크기로 거의 다다를 수있다 하지만 카프카에 대한 혁명적 인 문제는 역사적인 메시지 대기열이 있습니다 일반적으로 보낸 사람이 있습니다 누구에게 메시지를 보내고 싶은지 알고있는 그러나 카프카는 사실 이것을 반전하여 실제로 카프카에 메시지를 쓰는 사람은 누구인지 모릅니다

결국 이것을 읽을 것입니다 이 커플 링을 제거함으로써 독자와 작가 사이에는 기본적으로 새로운 유스 케이스는 사실 이후에 등장하기 때문에 이전에 RabbitMQ를 사용하고 있었다고 가정 해 봅시다 서비스 그룹에 메시지를 보냈습니다 그러나 누군가 분석을위한 새로운 유스 케이스를 생각해 냈습니다 데이터; 어떻게 실제로 그렇게 할 수 있니? 당신은 아마도 그것을 구성하여 새로운 보낸 사람도 새로운 장소로 보내야합니다

카프카의 경우 누구나 데이터를 읽을 수 있습니다 액세스 제어 목록에서 허용하는 한 처리를위한 여러 가지 새로운 유스 케이스가 허용됩니다 이것은 이상적인 Kafka 중심 데이터 흐름 모델입니다 그것은 아름답습니다 그러나 아무도 그것을 얻지 못합니다

중심적이지만, 이것은 하나가 될 것이라는 생각이다 모두가 모든 서비스 대신에 그렇게 이야기하는 것 서로 직접 이야기하면서, 그들은 카프카를 사용할 것입니다 이것은 사람들이 갈망하는 것이지만 실제로는 그렇습니다 더 스파게티 물건처럼 아직도 이것은 사람 갖고 싶어 기본적으로 카프카와 모든 상호 작용을하는 것 사이에 잘 ​​정의 된 인터페이스가있는 카프카를 통해 일어나는 일 데이터를 가지고 어떤 종류의 메시지 형식으로 구조화되도록 카프카에서는 주제에 대해 글을 쓰고 있습니다

Postgres 테이블과 상당히 유사합니다 기본적으로 데이터를 쓸 수있는 개체입니다 더 파티션으로 나뉘어 있으므로 무제한 또는 매우 높은 수의 파티션을 가지며, 기본적으로 동시성의 단위입니다 그래서, 만약 당신이 당신이 5 명의 독자들에게 말한다면, 당신은 적어도 Kafka가 실제로 5 명의 독자 모두에게 데이터를 전송할 수 있도록 5 개의 파티션 그래서 그들은 다시 같은 메시지를 처리하지 않습니다 5 명의 독자가 실제로 혜택을 누릴 수 있습니다

카프카의 다른 점은 그것이 불변이라는 것이다 로그이므로 로그 파일로 생각할 수도 있습니다 당신이 순차적으로 쓰고 다시 읽는 당신은 기본적으로 당신이 읽는 곳의 오프셋을 가지고 있습니다 기본적으로 불변의 순차 로그 그것은 가지고 있지 않다

에서 글쓰기가 정말 쉽고 빠르기 때문에 그 이상으로 어떤 종류의 구조도 많이 갖고 있지 않다 기본적으로 계속 쓸 수있는 불변의 로그 일뿐입니다 정말 빠른 속도로 내가 일찌감치 언급 한 것은 녀석 인 생산자 사이의 감 결합 누가 카프카 용어로 쓰고 있으며 소비자는 아이디어는 제작자가 로그 주제를 말하기 위해 물건을 쓸 때, 그들은 그것에 글을 쓴다

아무도 아직 읽지 않고있다 하지만 내가 원하는 유스 케이스가 있다고 가정 해 봅시다 내가 Elasticsearch에 복사하기 때문에 로그를 읽는 중 그것은 하나의 소비자 그룹이 될 것입니다 하지만 6 개월 후에 로그 항목을 처리하려고합니다 다시

데이터를 읽는 것만으로 새로운 소비자를 만들 수 있습니다 주제별로 시간대별로 검색 할 수도 있습니다 오프셋 # 4를 검색하고 검색하고 싶지는 않다고 가정 해 봅시다 당신은 2018 년 1 월 1 일을 말하고 그 다음엔 그 시점부터 데이터를 읽고 다시 처리하기 만하면됩니다 Apache Kafka를 인기있게 만드는 몇 가지 이점 실시간 스트리밍이나 그와 비슷한 것을 지원한다는 것입니다

10 밀리 초 미만의 대기 시간을 얻을 수 있습니다 실시간으로 어렵지는 않지만 충분히 빠릅니다 대부분의 사용 사례 수십억 개로 확장 할 수도 있습니다 하루에 메시지, 예를 들어 내가 전에 준 넷플릭스 예 그들은 3,000 노드의 Kafka를 실행하므로 꽤 많은 기계를 가지고 있고 물론 나는 그들이 톤과 톤의 가공 기계를 가지고있다

하지만 기본적으로 언제든지 Netflix를 찾고 있습니다 영화를 볼 때 기본적으로 마우스를 가리 키셨습니까? 제목 및 기간 서양 영화 나 SF 영화에 관심이 있습니까, 나도 몰라요 또는 무엇을하지 않고 기본적으로이 모든 데이터를 수집하고 있는지 실제로 실시간 프로필을 처리합니다 너는 관심이있다 그래서,이 남자는 어떤 종류의 것을 보았다

비누 오페라 때문에 일에 관심이있어 미래에 이런 종류의 일이 있거나 자녀가보고 있습니다 넷플 릭스, 만화에 대한 제안이나 또한 즉시 사용 가능한 랙 및 데이터 센터 인식 복제를 지원합니다 따라서 일반적으로 카프카에서 메시지에 대한 유일한 지속성 복제에서 빠져 나오므로 기계가 죽는다고 가정 해 봅시다 데이터의 다른 복제본이 필요할 것입니다

따라서 일반적으로 사람들은 복제 계수 2, 3 또는 그 이상을 사용합니다 그러나 일반적으로 사람들은 3을 선택하고 또한 영역 간 복제와 같은 기능을 지원합니다 예를 들어, 카프카를 실행중인 고객이 있습니다 남미와 그들의 데이터를 유럽으로 보냄 기본적으로 전 세계에서 카프카 클러스터를 운영 할 수 있습니다 대륙에서 섭취하는 일부 집단들과 함께 X 나중에 처리하기 위해 다른 곳으로 데이터 이동 그런 종류의 일은 완전히 평범한 때입니다 당신은 카프카를 대규모로 사용하고 있습니다

어쨌든, 거대한 패러다임 변화는 메시지 소비와 생산을 분리 시킨다는 것입니다 그래서 메시지를 만들 때, 즉 그것을 쓰면 누가 될지 알 필요가 없습니다 결국 그것을 처리하여 사실 이후의 새로운 아이디어와 메시지 재 처리 앞에서 언급했듯이 클라이언트 라이브러리는 거의 모든 언어로 제공됩니다 일부 언어는 다른 언어보다 나쁩니다 특히 어려운 고객이있었습니다

그것은 더 좋아졌다 파이썬에는 꽤 좋은 지원이 있고, 자바 네이티브 소비자 및 프로듀서 라이브러리가 있습니다 그래서 그것은 매우 우수한지지를 가지고 있습니다; C에서 상당히 잘 지원되는 librd Kafka라고 불리는 것 합류하여 카프카를 사용할 때의 단점은 ZooKeeper는 관리가 어려운 것으로 악명 높습니다 의존성이기 때문에 당신은 정말로 그것 없이는 실행할 수 없습니다 그렇다면 그것이 처리하지 않는 것들이 있습니다

예를 들어, 새 컴퓨터를 계속 추가하면 데이터 재조정을 자동화하지 않습니다 있다 이 작업을 수행하는 도구이지만 외부의 추가 도구입니다 Kafka 자체의 균형을 맞추고 싶다면 Kafka 중개인 노드 사이에로드가 발생하면 그것을하는 방법 특히 역사적으로 카프카는 안정성 문제의 몫 시간이 지남에 따라 더 좋고, 일부 사람들은 여전히 ​​조금 거칠다 고 말할 것입니다

가장자리 주위 거래를 원하지 않으면 번거로운 일, 관리되는 Kafka 서비스 사용을 고려하십시오 우리 나 컨 플루 언트의 경우, 많은 시간을 절약 할 수 있습니다 당연히 직접 실행할 수도 있지만 그 다음에는 얻을 수 있습니다 ZooKeeper 문제를 모두 자신에게 맡기십시오

이제, 파이프 라인의 데이터베이스는 상당히 유사한 요구 사항을 가지고 있습니다 이전 슬라이드에서 카프카에 대해 발표 한 내용대로 확장 성, 신뢰성, 그리고 일종의 언어 및 운영 체제에 대한 플랫폼 지원 또는 실행중인 환경 Postgres는 보통 이것에 대한 꽤 좋은 선택입니다 정말 강력합니다 깨지기가 매우 어렵습니다 넌 할 수있어 하지만 다른 구성 요소가 모두 데이터 파이프 라인에서 Postgres가 상당히 신뢰할 만합니다 임의의 쿼리를 실행하는 것도 정말 쉽습니다

귀하의 데이터에 귀하의 데이터를 밀어 넣고 있다고 가정 해 봅시다 카산드라처럼 그렇게하기 쉽지 않습니다 Postgres 사용 당신은 임의의 인덱스를 만들 수 있습니다 데이터간에 조인을 쉽게 수행 할 수 있습니다 실제로 EXPLAIN 지원은 매우 유용한 쿼리를 실행할 것입니다

당신이 왜 당신이 궁금해 할 때 많은 것들을 위해 쿼리가 느리게 실행 중입니다 모든 경쟁 데이터베이스가 아닙니다 포스트그레스만큼 쓸만한 것이있다 지원을 설명하십시오 Postgres의 단점은 제한적입니다

수평 확장 성 (예 : 데이터가 맞지 않을 때) 하나의 컴퓨터에 설치하면 대개 문제가됩니다 5 ~ 10 테라 바이트의 데이터베이스를 보는 것은 드문 일이 아닙니다 10 년 전에 환상의 영역에 있었던 기본적으로 비용이 많이 드는 맞춤 하드웨어가 필요했습니다 수백만지만 요즘은 10 테라 바이트가 일반적입니다 다른 회사의 장소 카프카 중심의 데이터를 실행하는 경우 기본적으로 Postgres로 유동 모델을 보내고 있습니다

응용 프로그램 계층의 모든 데이터를 Kafka로 그런 다음 그것을 Postgres로 섭취하면 귀하의 실시간 요구에 맞는 별도의 OLTP 클러스터가 있어야합니다 그런 다음 메트릭을 처리 할 클러스터가있을 수 있습니다 푸시하려는 시계열 데이터가 있다고 가정 해 보겠습니다 Postgres는 다양한 유스 케이스를 수용 할 수 있습니다 OLTP 또는웨어 하우징뿐만 아니라 실제로 할 수 있습니다

다양한 데이터 유형을위한 많은 다른 것들 다음은 실행중인 경우 수행 할 작업의 예입니다 Influx 데이터의 Telegraf 기본적으로 메트릭 컬렉션입니다 전에 보지 못했던 사람들을위한 에이전트 이는 기본적으로 CPU 또는 VM의 디스크 사용량 측정 항목을 VM에 저장하고 출력을 선택하십시오 정말 큰 선택이 있습니다

데이터를 푸시 할 수있는 출력 (예 : Kafka, PG 및 다른 많은 다른 시스템들 이 경우, InfluxDB 이렇게하면 데이터를 수집 할 수 있습니다 이것은 단지 수집중인 데이터 파이프 라인의 예 무언가에서 직접 오는 측정 항목 휴대 전화와 같은 것 또는 그렇지 않은 것 그러나이 내 사례에서 우리의 데이터 파이프 라인은 기본적으로 Telegraf 자체에서 데이터를 가져 오는 것으로 구성됩니다

그런 다음 일반적으로 데이터를 Apache Kafka에 보내면 다른 컨테이너 또는 가능하게는 카프카 스트림 응용 프로그램 응용 프로그램을 연결하십시오 모르는 사람들을 위해, 카프카 커넥트는 카프카 (Kafka) 서비스로 소스의 데이터를 가져 와서 다른 곳으로 가져 와서 Postgres에서 데이터를 읽고 싶다고 가정 해 봅시다 당신은 Elasticsearch 또는 다른 어떤 곳으로 보내고 싶습니다 예를 들어 Amazon S3와 같은 서비스에는 Kafka Connect가 있습니다 이런 종류의 일을 할 준비가 된 커넥터 그러나이 예에서 실제로 Telegraf를 사용하여 InfluxDB에 보냄

이 예제에서 InfluxDB에 대한 단어 이것은 우리가 시계열 데이터로 가지고있는 것과 상당히 가깝습니다 Aiven에서 사용한 파이프 라인 InfluxDB는 기본적으로 압축을위한 고릴라 종이 기반 그것은 압축한다 시계열 데이터는 실제로는 효율적이지만 디스크는 발자국도 정말 작습니다

또한 상당히 빠르며 비늘 잘 불행히도 그것은 HA와 같은 것들을 가지고 있지 않습니다 이전에는 고 가용성을 수행하는 기본적인 방법이있었습니다 하지만 그들은 오픈 소스 버전에서 그것을 제거했습니다 그들이 판매하는 독점 버전에 넣으십시오

과 그런 종류의 사용 사례는 제한적입니다 또한 예기치 않은 메모리 사용 패턴 당신은 select *를 foo limit 1에서하고 있습니다 실제로는 그렇지 않습니다 생각대로 행 하나를 반환하면 실제로 실현됩니다

그 모든 것을 메모리에 넣은 다음 그 중 하나를 취합니다 그것에서 행 그래서 당신의 테이블 foo가 테라 바이트라고 가정 해 봅시다 적어도 1 테라 바이트의 메모리가 있어야합니다 한 줄 가져와

그래서, 이런 일은 그렇게 쉽지 않습니다 예측하기 위해 모든 것을 지원하지 않는다 EXPLAIN과 같습니다 그래서 당신이 그것을 알고 싶어한다고 가정 해 봅시다 할거야, 그건 네게 말하지 않을거야

이것들은 당신이 단지 알아야 할 것들입니다 어디에서나 날카로운 모서리가 있습니다 현재 언어가 아닌 다른 언어로 전환 중입니다 SQL과 같은 언어 이것은 더 많은 것을 나타낸다

진입 장벽이 다르다 이것은 동일한 일을하는 또 다른 방법이므로 대신 카프카를 통해 어느 기기에서든지 데이터를 푸시 할 수 있습니다 Time-series 데이터베이스 인 InfluxDB에 Postgres를 사용하여 실제로 동일한 작업을 수행합니다 당신은 기본적으로 하나의 컴포넌트를 더 가질 것입니다 어딘가에있는 Postgres를 실행하십시오

관리 및 유지에 대한 또 다른 의존성 네가 그걸 없애 버릴 수 있다면 그래서 역사적으로 시계열 데이터를 저장하고 저장하는 다양한 방법 Postgres에서; 사람들이 pg_partman을 사용하고 있습니다 그리고 당신이 할 수 있도록 파티셔닝을하는 그런 종류의 일 실제로 데이터를 빠른 속도로 수집하고 저장합니다 이들 실제로는 비교적 일반적으로 사용되는 확장 기능이 있습니다 기본적으로 Postgres를 수행하는 TimescaleDB를 호출합니다