powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
6 сообщений из 6, страница 1 из 1
Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
    #39323948
Girgory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Нужна помощь в определении почему размер базы такой, как есть. Задача я так
поманию для профи должна быть простая, потому что база из моего простенького
хобби приложения. Просто я не силен в базах, но хочу разобраться. База на PostgreSQL.
Еще одна деталь. Приложение написано на яве и задеплоено в облако в
триальный аккаунт. Размер базы там ограничивается 20MB. Для тестов вполне
достаточно, тем более, что все бесплатно. И сейчас после нескольких месяцев
отладки размер базы достиг предела и вышел за него - 25MB, хотя мне со стороны,
как пользователю кажется, что данных мало. И я хочу разобраться почему так получается.


Итак. Вот структура базы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
# \d
                 List of relations
 Schema |        Name        |   Type    
--------+--------------------+----------
 public | hibernate_sequence | sequence 
 public | post               | table    
 public | site               | table    
 public | user_account       | table    
 public | user_authority     | table    
 public | userconnection     | table    
(6 rows)


# \d post
                   Table "public.post"
     Column     |            Type             | Modifiers 
----------------+-----------------------------+-----------
 id             | bigint                      | not null
 author         | character varying(255)      | 
 content        | text                        | not null
 creation_time  | timestamp without time zone | not null
 tags           | character varying(255)      | 
 title          | text                        | not null
 url            | character varying(255)      | not null
 site_id        | bigint                      | not null
 published_date | timestamp without time zone | not null
 uri            | character varying(255)      | not null
Indexes:
    "post_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "fkadd3gkkmgwsi1dy825qkfd62e" FOREIGN KEY (site_id) REFERENCES site(id)


# \d site 
                  Table "public.site"
    Column    |            Type             | Modifiers 
--------------+-----------------------------+-----------
 id           | bigint                      | not null
 last_visited | timestamp without time zone | 
 title        | text                        | 
 url          | character varying(255)      | not null
 description  | text                        | 
Indexes:
    "site_pkey" PRIMARY KEY, btree (id)
Referenced by:
    TABLE "post" CONSTRAINT "fkadd3gkkmgwsi1dy825qkfd62e" FOREIGN KEY (site_id) REFERENCES site(id)


# \d user_account
                 Table "public.user_account"
      Column       |            Type             | Modifiers 
-------------------+-----------------------------+-----------
 id                | bigint                      | not null
 email             | character varying(255)      | not null
 first_name        | character varying(255)      | 
 last_name         | character varying(255)      | 
 last_request_time | timestamp without time zone | not null
 password          | character varying(255)      | not null
 registration_time | timestamp without time zone | not null
Indexes:
    "user_account_pkey" PRIMARY KEY, btree (id)
    "uk_hl02wv5hym99ys465woijmfib" UNIQUE CONSTRAINT, btree (email)
Referenced by:
    TABLE "user_authority" CONSTRAINT "fkn48a3n0mb8d8njshjf75kgsv" FOREIGN KEY (user_id) REFERENCES user_account(id)


# \d userconnection
            Table "public.userconnection"
     Column     |          Type          | Modifiers 
----------------+------------------------+-----------
 userid         | character varying(255) | not null
 providerid     | character varying(255) | not null
 provideruserid | character varying(255) | not null
 rank           | integer                | not null
 displayname    | character varying(255) | 
 profileurl     | character varying(512) | 
 imageurl       | character varying(512) | 
 accesstoken    | character varying(512) | not null
 secret         | character varying(512) | 
 refreshtoken   | character varying(512) | 
 expiretime     | bigint                 | 
Indexes:
    "userconnection_pkey" PRIMARY KEY, btree (userid, providerid, provideruserid)
    "userconnectionrank" UNIQUE, btree (userid, providerid, rank)


# \d user_authority
         Table "public.user_authority"
  Column   |          Type          | Modifiers 
-----------+------------------------+-----------
 authority | character varying(255) | not null
 user_id   | bigint                 | not null
Indexes:
    "user_authority_pkey" PRIMARY KEY, btree (user_id, authority)
Foreign-key constraints:
    "fkn48a3n0mb8d8njshjf75kgsv" FOREIGN KEY (user_id) REFERENCES user_account(id)


Вот размер базы

Код: plaintext
1.
2.
3.
select pg_database_size('rodiahug');

pg_database_size
25714860


Вот этим запросом я вывожу сколько занимают таблицы в базе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
   relname as "Table",
   pg_size_pretty(pg_total_relation_size(relid)) As "Size",
   pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as "External Size"
   FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;


Table                 Size              External Size
site                  64 kB             56 kB
user_account          48 kB             40 kB
post                  48 kB             24 kB
userconnection        48 kB             40 kB
user_authority        24 kB             16 kB

Как видим, если сложить все размеры получается сильно меньше 24MB.

Погуглив, нахожу запрос, чтобы посмотреть какие другие объекты в базе занимают
место.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 1 AND reltuples > 0
   ORDER BY relpages DESC;

objectname                          objecttype  #entries    size
pg_largeobject                      r           129767.0    6152 kB
pg_largeobject_metadata             r           131790.0    5704 kB
pg_shdepend_depender_index          i           71390.0     4368 kB
pg_shdepend                         r           71390.0     4296 kB
pg_largeobject_metadata_oid_index   i           131790.0    2912 kB
pg_largeobject_loid_pn_index        i           129767.0    2872 kB
pg_shdepend_reference_index         i           71390.0     2576 kB
pg_database                         r           5048.0      1496 kB
pg_proc                             r           3473.0      712 kB
pg_depend                           r           11312.0     672 kB
pg_authid                           r           2921.0      448 kB
pg_attribute                        r           2573.0      376 kB
pg_depend_depender_index            i           11312.0     368 kB
pg_depend_reference_index           i           11312.0     368 kB
pg_description                      r           3876.0      272 kB
pg_proc_proname_args_nsp_index      i           3473.0      264 kB
pg_database_datname_index           i           4214.0      176 kB
pg_authid_rolname_index             i           2901.0      168 kB
pg_statistic                        r           422.0       144 kB
pg_operator                         r           907.0       136 kB
pg_attribute_relid_attnam_index     i           2573.0      136 kB
pg_database_oid_index               i           4214.0      136 kB
pg_description_o_c_o_index          i           3876.0      136 kB
pg_rewrite                          r           115.0       96 kB
pg_proc_oid_index                   i           3473.0      96 kB
pg_attribute_relid_attnum_index     i           2573.0      96 kB
pg_authid_oid_index                 i           2901.0      88 kB
pg_type                             r           416.0       80 kB
pg_collation                        r           303.0       80 kB
pg_amop                             r           1025.0      72 kB
pg_class                            r           337.0       72 kB
pg_amproc                           r           904.0       56 kB
pg_class_relname_nsp_index          i           337.0       56 kB
pg_amproc_fam_proc_index            i           904.0       48 kB
pg_operator_oprname_l_r_n_index     i           907.0       48 kB
pg_amop_opr_fam_index               i           1025.0      48 kB
pg_type_typname_nsp_index           i           416.0       48 kB
pg_amop_fam_strat_index             i           1025.0      48 kB
pg_class_tblspc_relfilenode_index   i           337.0       40 kB
pg_amop_oid_index                   i           1025.0      40 kB
pg_operator_oid_index               i           907.0       40 kB
pg_amproc_oid_index                 i           904.0       40 kB
pg_class_oid_index                  i           337.0       40 kB
pg_ts_config_map_index              i           304.0       32 kB
pg_statistic_relid_att_inh_index    i           422.0       32 kB
pg_collation_name_enc_nsp_index     i           303.0       32 kB
pg_type_oid_index                   i           416.0       32 kB
pg_opclass_am_name_nsp_index        i           219.0       32 kB
pg_opclass                          r           219.0       32 kB
pg_conversion                       r           132.0       24 kB
post                                r           67.0        24 kB
pg_toast_2619                       t           15.0        24 kB
pg_index                            r           131.0       24 kB
pg_opfamily                         r           172.0       24 kB
pg_rewrite_oid_index                i           115.0       16 kB
pg_rewrite_rel_rulename_index       i           115.0       16 kB
pg_trigger_tgconstraint_index       i           8.0         16 kB
pg_trigger_tgrelid_tgname_index     i           8.0         16 kB
pg_namespace_nspname_index          i           6.0         16 kB
pg_namespace_oid_index              i           6.0         16 kB
pg_ts_config_cfgname_index          i           16.0        16 kB
pg_ts_config_oid_index              i           16.0        16 kB
pg_ts_dict_dictname_index           i           19.0        16 kB
pg_ts_dict_oid_index                i           19.0        16 kB
pg_ts_parser_prsname_index          i           1.0         16 kB
pg_ts_parser_oid_index              i           1.0         16 kB
pg_ts_template_tmplname_index       i           8.0         16 kB
pg_ts_template_oid_index            i           8.0         16 kB
pg_foreign_data_wrapper_oid_index   i           1.0         16 kB
pg_foreign_data_wrapper_name_index  i           1.0         16 kB
pg_extension_oid_index              i           24.0        16 kB
pg_range_rngtypid_index             i           6.0         16 kB
site_pkey                           i           3.0         16 kB
userconnectionrank                  i           4.0         16 kB
userconnection_pkey                 i           4.0         16 kB
pg_index_indexrelid_index           i           131.0       16 kB
pg_am_oid_index                     i           6.0         16 kB
pg_aggregate_fnoid_index            i           140.0       16 kB
pg_index_indrelid_index             i           131.0       16 kB
pg_cast_oid_index                   i           224.0       16 kB
pg_cast_source_target_index         i           224.0       16 kB
pg_conversion_default_index         i           132.0       16 kB
pg_conversion_name_nsp_index        i           132.0       16 kB
pg_conversion_oid_index             i           132.0       16 kB
pg_constraint_contypid_index        i           13.0        16 kB
pg_constraint_conrelid_index        i           13.0        16 kB
pg_collation_oid_index              i           303.0       16 kB
pg_pltemplate_name_index            i           8.0         16 kB
pg_constraint_conname_nsp_index     i           13.0        16 kB
pg_shdescription_o_c_index          i           1.0         16 kB
pg_tablespace_oid_index             i           2.0         16 kB
pg_tablespace_spcname_index         i           2.0         16 kB
pg_toast_2619_index                 i           15.0        16 kB
user_authority_pkey                 i           5.0         16 kB
pg_opfamily_am_name_nsp_index       i           172.0       16 kB
pg_opfamily_oid_index               i           172.0       16 kB
pg_opclass_oid_index                i           219.0       16 kB
pg_language_name_index              i           5.0         16 kB
pg_language_oid_index               i           5.0         16 kB
user_account_pkey                   i           3.0         16 kB
uk_hl02wv5hym99ys465woijmfib        i           3.0         16 kB
pg_cast                             r           224.0       16 kB
pg_ts_config_map                    r           304.0       16 kB
pg_extension_name_index             i           24.0        16 kB
post_pkey                           i           67.0        16 kB
pg_constraint_oid_index             i           13.0        16 kB
pg_aggregate                        r           140.0       16 kB
pg_trigger_oid_index                i           8.0         16 kB
pg_am_name_index                    i           6.0         16 kB
pg_ts_config                        r           16.0        8192 bytes
pg_am                               r           6.0         8192 bytes
pg_ts_dict                          r           19.0        8192 bytes
pg_ts_parser                        r           1.0         8192 bytes
pg_ts_template                      r           8.0         8192 bytes
pg_extension                        r           24.0        8192 bytes
pg_foreign_data_wrapper             r           1.0         8192 bytes
user_account                        r           3.0         8192 bytes
pg_range                            r           6.0         8192 bytes
pg_constraint                       r           13.0        8192 bytes
pg_tablespace                       r           2.0         8192 bytes
user_authority                      r           5.0         8192 bytes
pg_shdescription                    r           1.0         8192 bytes
site                                r           3.0         8192 bytes
pg_trigger                          r           8.0         8192 bytes
userconnection                      r           4.0         8192 bytes
pg_language                         r           5.0         8192 bytes
pg_namespace                        r           6.0         8192 bytes
pg_pltemplate                       r           8.0         8192 bytes
hibernate_sequence                  S           1.0         8192 bytes

И вот тут хочу понять что это за объекты такие, которые занимают места сильно
больше, чем пользовательские таблицы?
Например, вот эти

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
pg_largeobject                      r           129767.0    6152 kB
pg_largeobject_metadata             r           131790.0    5704 kB
pg_shdepend_depender_index          i           71390.0     4368 kB
pg_shdepend                         r           71390.0     4296 kB
pg_largeobject_metadata_oid_index   i           131790.0    2912 kB
pg_largeobject_loid_pn_index        i           129767.0    2872 kB
pg_shdepend_reference_index         i           71390.0     2576 kB
pg_database                         r           5048.0      1496 kB

Нормально ли это, нужно ли за этим следить? В общем, у меня как у дилетанта
в базах вопрос простой: почему пользовательские таблицы занимают так
мало, а системные объекты так много?

Буду рад советам.
...
Рейтинг: 0 / 0
Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
    #39324002
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Girgory,

Вы храните какие-то файлы в базе? Или может это делает ORM за вас, подхватывая какой-либо объект (навроде File) и сохраняя его в базу?
...
Рейтинг: 0 / 0
Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
    #39324006
Girgory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

File не храню. ORM тоже не должен ничего подкладывать. Но у меня несколько колонок типа text. Например, колонка content в таблице post. В ней хранятся статьи в виде html. Но размер их небольшой. По сути это хранятся посты с блогов (без картинок, без файлов, только html). Но размер данных в этих колонках смешной - это 10-ки килобайт.
...
Рейтинг: 0 / 0
Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
    #39324031
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Girgory,

У Postgres'а есть такое понятие как “shared catalog”, или общий каталог . Под него попадают системные таблицы:
Код: sql
1.
select oid,relname from pg_class where (relisshared or relname ~ 'largeo') and relkind='r';


Я сюда также добавил `pg_largeobject_metadata` и `pg_largeobject`, т.к. интерфейс больших объектов глобален для всего экземпляра (непонятно, почему эти таблицы не отмечены как `relisshared` — может я и неправ).

Т.е. вы видите, например, что в данном экземпляре 5048 различных баз (вместе с вашей).
Остальные объекты (которые вы отделили) столь велики потому, что другие клиенты используют свои базы более интенсивно, чем вы.

Я бы сделал следующее:
выяснил у пройвадера сервиса как он считает занимаемое место

исключил таблицы выше из подсчёта размера базы.
...
Рейтинг: 0 / 0
Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
    #39325769
Girgory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov,

Запросил у провайдер как он считает размер базы. Ничего нового не узнал. Говорят вот так:

Код: sql
1.
select datname as name, pg_database_size(datname) as bytes from pg_database where datname='rodiahug'



Этот запрос возвращает те самые 24MB. Но что-то я не могу сделать запрос, который бы показал из каких составляющих считается этот размер. Так-то понятно, что скорее всего размер действительно такой. Но просто уж больно интересно куда конкретно место уходит.

Вы не знаете как всё-таки составить запрос на составляющие pg_database_size?
...
Рейтинг: 0 / 0
Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
    #39325919
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Girgory,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT
  concat(nsp.nspname, '.', c.relname) AS relation_name,
  pg_size_pretty(pg_relation_size(c.oid))
FROM
  pg_class AS c
  INNER JOIN
  pg_namespace AS nsp
  ON c.relnamespace = nsp.oid
ORDER BY
  pg_relation_size(c.oid) DESC
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему размер пользовательских таблиц такой маленький в сравнении с внутренними объектами?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]