Re: four minor proposals for 9.5

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: four minor proposals for 9.5
Дата
Msg-id CAFj8pRCB5JO=QnOd=3aaNudYMM6PUD+ANzo8eqzNRbyinyLMew@mail.gmail.com
обсуждение исходный текст
Ответ на Re: four minor proposals for 9.5  (Mark Kirkwood <mark.kirkwood@catalyst.net.nz>)
Ответы Re: four minor proposals for 9.5  (Mark Kirkwood <mark.kirkwood@catalyst.net.nz>)
Список pgsql-hackers



2014-03-20 7:25 GMT+01:00 Mark Kirkwood <mark.kirkwood@catalyst.net.nz>:
On 20/03/14 13:28, Josh Berkus wrote:

3. relation limit - possibility to set session limit for maximum size of
relations. Any relation cannot be extended over this limit in session, when
this value is higher than zero. Motivation - we use lot of queries like
CREATE TABLE AS SELECT .. , and some very big results decreased a disk free
space too much. It was high risk in our multi user environment. Motivation
is similar like temp_files_limit.

I'd think the size of the relation you were creating would be difficult
to measure.  Also, would this apply to REINDEX/VACUUM FULL/ALTER?  Or
just CREATE TABLE AS/SELECT INTO?


Also I think this would probably only make sense for TEMPORARY tables - otherwise you can get this sort of thing going on:

- you create a table and you have set a relation size limit
- you commit and keep working
- I add a whole lot of rows to your new table (taking it over the limit)
- you go to add some more rows to this table...

you cannot to across session limit and is not important if you do inserts more times or once.

This patch is very simple - it is only one safeguard against too low space on disc in very dynamic multi user enironment

--- ./src/backend/storage/smgr/md.c     2014-02-26 17:29:36.864189192 +0100
***************
*** 27,32 ****
--- 27,33 ----
  #include "storage/bufmgr.h"
  #include "storage/relfilenode.h"
  #include "storage/smgr.h"
+ #include "utils/guc.h"
  #include "utils/hsearch.h"
  #include "utils/memutils.h"
  #include "pg_trace.h"
***************
*** 180,185 ****
--- 181,191 ----
  static BlockNumber _mdnblocks(SMgrRelation reln, ForkNumber forknum,
                   MdfdVec *seg);

+ /*
+  *  limits for relations size
+  */
+ int max_blocks;

  /*
   *    mdinit() -- Initialize private state for magnetic disk storage manager.
***************
*** 475,480 ****
--- 481,494 ----
        Assert(blocknum >= mdnblocks(reln, forknum));
  #endif

+       if (max_blocks != -1 && blocknum > (BlockNumber) max_blocks)
+               ereport(ERROR,
+                               (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
+                                errmsg("cannot extend file beyond %u blocks",
+                                               max_blocks),
+                                errhint("Session file limit defined by \"hard_relation_limit\" (%s) is over.",
+                                               GetConfigOptionByName("hard_relation_limit", NULL))));
+


 

Should you now be stopped working? Does this feature need to track *who* added which chunks of a table (suspect very difficult to do sensibly)?

Regards

Mark

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: four minor proposals for 9.5
Следующее
От: Vik Fearing
Дата:
Сообщение: Re: ALTER TABLE lock strength reduction patch is unsafe Reply-To: