{"id":35920,"date":"2019-10-31T22:07:35","date_gmt":"2019-10-31T19:07:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\/"},"modified":"2019-10-31T22:07:35","modified_gmt":"2019-10-31T19:07:35","slug":"nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","title":{"rendered":"Configuring Linux Kernel Parameters for PostgreSQL Optimization","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Configuring Linux Kernel Parameters for PostgreSQL Optimization\" src=\"\/wp-content\/uploads\/2019\/07\/a28458ff50cdc517aad71b47adab6eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/> The optimal performance of PostgreSQL depends on properly defined operating system parameters. Poorly configured OS kernel parameters can lead to a decrease in the performance of the database server. Therefore, it is essential that these parameters are tuned according to the database server and its workload. In this post, we will discuss some important Linux kernel parameters that can affect the performance of the database server and how to configure them.<\/p>\n<h2>SHMMAX \/ SHMALL<\/h2>\n<p>\n<b>SHMMAX<\/b> is a kernel parameter used to define the maximum size of a single shared memory segment that a Linux process can allocate. Before version 9.2, PostgreSQL used System V (SysV), which requires the configuration of SHMMAX. After 9.2, PostgreSQL switched to POSIX shared memory. So, less bytes of System V shared memory are now required.<\/p>\n<p>Until version 9.3, SHMMAX was the most critical kernel parameter. The value of SHMMAX is set in bytes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSimilarly, <b>SHMALL<\/b> is another kernel parameter used to determine <br \/>\nthe total number of pages of shared memory across the system. To view the current values of SHMMAX, SHMALL, or SHMMIN, use the command <i>ipcs<\/i>.<\/p>\n<p><b>SHM* Details \u2014 Linux<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -lm\n\n------ Shared Memory Limits --------\nmax number of segments = 4096\nmax seg size (kbytes) = 1073741824\nmax total shared memory (kbytes) = 17179869184\nmin seg size (bytes) = 1<\/code><\/pre>\n<p>\n<b>SHM* Details \u2014 MacOS X<\/b><\/p>\n<pre><code class=\"bash\">$ ipcs -M\nIPC status from  as of Thu Aug 16 22:20:35 PKT 2018\nshminfo:\n\tshmmax: 16777216\t(max shared memory segment size)\n\tshmmin:       1\t(min shared memory segment size)\n\tshmmni:      32\t(max number of shared memory identifiers)\n\tshmseg:       8\t(max shared memory segments per process)\n\tshmall:    1024\t(max amount of shared memory in pages)\n<\/code><\/pre>\n<p>\nPostgreSQL uses <b>System V IPC<\/b> for allocating shared memory. This parameter is one of the most important kernel parameters. Whenever you receive the following error messages, it indicates that you have an older version of PostgreSQL and a very low value for SHMMAX. Users are expected to adjust and increase the value according to the shared memory they intend to use.<\/p>\n<h3>Possible Misconfiguration Errors<\/h3>\n<p>\nIf SHMMAX is misconfigured, you may encounter errors when trying to initialize a PostgreSQL cluster with the command <i>initdb<\/i>.<\/p>\n<p><b>initdb Failure<\/b><br \/>\n<code>DETAIL: Failed system call was shmget(key=1, size=2072576, 03600). <\/p>\n<p>HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.\u00a0 <br \/>\nYou can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 2072576 bytes), <br \/>\nreduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. <\/p>\n<p>If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter,<br \/>\nin which case raising the request size or reconfiguring SHMMIN is called for. <\/p>\n<p>The PostgreSQL documentation contains more information about shared memory configuration. child process exited with exit code 1<\/code><\/p>\n<p>Similarly, you may encounter an error when starting the PostgreSQL server using the command <i>pg_ctl<\/i>.<\/p>\n<p><b>pg_ctl Failure<\/b><br \/>\n<code>DETAIL: Failed system call was shmget(key=5432001, size=14385152, 03600).<\/p>\n<p>HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.<\/p>\n<p>You can either reduce the request size or reconfigure the kernel with larger SHMMAX.; To reduce the request size (currently 14385152 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.<\/p>\n<p>If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, <br \/>\nin which case raising the request size or reconfiguring SHMMIN is called for.<\/p>\n<p>The PostgreSQL documentation contains more information about shared memory configuration.<\/code><\/p>\n<h3>Understanding the differences in definitions<\/h3>\n<p>\nThe definitions of SHMMAX\/SHMALL differ slightly in Linux and MacOS X:<\/p>\n<ul>\n<li>Linux: kernel.shmmax, kernel.shmall<\/li>\n<li>MacOS X: kern.sysv.shmmax, kern.sysv.shmall<\/li>\n<\/ul>\n<p>\nThe command <i>sysctl<\/i> can be used to temporarily change the value. To set permanent values, add an entry to <i>\/etc\/sysctl.conf<\/i>. Details are provided below.<\/p>\n<p><b>Changing kernel parameters on MacOS X<\/b><\/p>\n<pre><code class=\"plaintext\"># Get the value of SHMMAX\nsudo sysctl kern.sysv.shmmax\nkern.sysv.shmmax: 4096\n\n# Get the value of SHMALL\nsudo sysctl kern.sysv.shmall \nkern.sysv.shmall: 4096\n\n# Set the value of SHMMAX\nsudo sysctl -w kern.sysv.shmmax=16777216\nkern.sysv.shmmax: 4096 -&gt; 16777216\n\n# Set the value of SHMALL \nsudo sysctl -w kern.sysv.shmall=16777216\nkern.sysv.shmall: 4096 -&gt; 16777216<\/code><\/pre>\n<p>\n<b>Changing kernel parameters on Linux<\/b><\/p>\n<pre><code class=\"plaintext\"># Get the value of SHMMAX\nsudo sysctl kernel.shmmax\nkernel.shmmax: 4096\n\n# Get the value of SHMALL\nsudo sysctl kernel.shmall\nkernel.shmall: 4096\n\n# Set the value of SHMMAX\nsudo sysctl -w kernel.shmmax=16777216\nkernel.shmmax: 4096 -&gt; 16777216\n\n# Set the value of SHMALL \nsudo sysctl -w kernel.shmall=16777216\nkernel.shmall: 4096 -&gt; 16777216<\/code><\/pre>\n<p>\n<b>Don't forget<\/b>: to make the changes permanent, add these values to \/etc\/sysctl.conf<\/p>\n<h2>Huge Pages<\/h2>\n<p>\nLinux uses 4 KB memory pages by default, while BSD uses <i>Super Pages<\/i>, and Windows uses <i>Large Pages<\/i>. A page is a portion of RAM allocated to a process. A process may have multiple pages depending on memory requirements. The more memory a process needs, the more pages it is allocated. The OS maintains a page allocation table for processes. The smaller the page size, the larger the table, and the longer it takes to locate a page in this page table. Therefore, larger pages allow for a larger amount of memory with reduced overhead; fewer page views, fewer page faults, faster read\/write operations through larger buffers. As a result, improved performance.<\/p>\n<p>PostgreSQL supports large pages only on Linux. By default, Linux uses 4 KB memory pages, so in cases where there are too many memory operations, larger pages need to be set. A performance boost is observed when using large pages sized from 2 MB to 1 GB. The size of a large page can be set during boot. You can easily check the settings and usage of large pages on your Linux computer using the command <i>cat \/proc\/meminfo | grep -i huge<\/i>.<\/p>\n<p><b>Obtaining information about large pages (Linux only)<\/b><\/p>\n<pre><code class=\"bash\">Note: This is only for Linux, for other OS this operation is ignored$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:       0\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nIn this example, although the large page size is set to 2048 (2 MB), the total number of large pages is 0. This means that large pages are disabled.<\/p>\n<h3>Script to determine the number of large pages<\/h3>\n<p>\nThis simple script returns the required number of large pages. Run the script on your Linux server while PostgreSQL is running. Ensure that the environment variable <i>$PGDATA<\/i> is set to the PostgreSQL data directory.<\/p>\n<p><b>Obtaining the number of required large pages<\/b><\/p>\n<pre><code class=\"bash\">#!\/bin\/bash\npid=`head -1 $PGDATA\/postmaster.pid`\necho \"Pid:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $pid\"\npeak=`grep ^VmPeak \/proc\/$pid\/status | awk '{ print $2 }'`\necho \"VmPeak:\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $peak kB\"\nhps=`grep ^Hugepagesize \/proc\/meminfo | awk '{ print $2 }'`\necho \"Hugepagesize:\u00a0\u00a0 $hps kB\"\nhp=$((peak\/hps))\necho Set Huge Pages:\u00a0\u00a0\u00a0\u00a0 $hp<\/code><\/pre>\n<p>\nThe script output looks like this:<\/p>\n<p><b>Script output<\/b><\/p>\n<pre><code class=\"bash\">Pid:            12737\nVmPeak:        180932 kB\nHugepagesize:   2048 kB\nSet Huge Pages: 88<\/code><\/pre>\n<p>\nThe recommended value for large pages is 88, so you should set the value to 88.<\/p>\n<p><b>Setting large pages<\/b><\/p>\n<pre><code class=\"bash\">sysctl -w vm.nr_hugepages=88<\/code><\/pre>\n<p>\nCheck the large pages now, you will see that large pages are not in use (HugePages_Free = HugePages_Total).<\/p>\n<p><b>Again, information about large pages (Linux only)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:      88\nHugePages_Free:       88\nHugePages_Rsvd:       0\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nNow set the huge_pages parameter to 'on' in $PGDATA\/postgresql.conf and restart the server.<\/p>\n<p><b>And again, information about large pages (Linux only)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:      88\nHugePages_Free:       81\nHugePages_Rsvd:       64\nHugePages_Surp:       0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nNow you can see that very few large pages are being used. Let\u2019s try adding some data to the database.<\/p>\n<p><b>Some database operations for utilizing large pages<\/b><\/p>\n<pre><code class=\"sql\">postgres=# CREATE TABLE foo(a INTEGER);\nCREATE TABLE\npostgres=# INSERT INTO foo VALUES(generate_Series(1,10000000));\nINSERT 0 10000000<\/code><\/pre>\n<p>\nLet's see if we are using more large pages now than before.<\/p>\n<p><b>Once again, information about large pages (only on Linux)<\/b><\/p>\n<pre><code class=\"bash\">$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nShmemHugePages:        0 kB\nHugePages_Total:      88\nHugePages_Free:       18\nHugePages_Rsvd:       1\nHugePages_Surp:      0\nHugepagesize:       2048 kB<\/code><\/pre>\n<p>\nNow you can see that most large pages are in use.<\/p>\n<p>Note: The approximate value for HugePages used here is very low, which is not a normal value for a production environment machine. Please assess the necessary number of pages for your system and set them accordingly based on load and resources.<\/p>\n<h3>vm.swappiness<\/h3>\n<p>\n<b>vm.swappiness<\/b> is another kernel parameter that can affect database performance. This parameter is used to manage swap behavior (swappiness) (swapping pages in and out of memory) in Linux. The value ranges from 0 to 100. It determines how much memory will be swapped out or in. Zero means swap is turned off, while 100 means aggressive swapping.<\/p>\n<p>You can achieve good performance by setting lower values.<\/p>\n<p>Setting the value to 0 in newer kernels may cause the OOM Killer (out-of-memory process in Linux) to terminate the process. Therefore, it is safe to set the value to 1 if you want to minimize swapping. The default value in Linux is 60. Higher values cause the MMU (memory management unit) to use more swap space than RAM, while lower values keep more data\/code in memory.<\/p>\n<p>Lower value is a good bet for improving performance in PostgreSQL.<\/p>\n<h3>vm.overcommit_memory \/ vm.overcommit_ratio<\/h3>\n<p>\nApplications allocate memory and release it when it is no longer needed. But sometimes an application allocates too much memory and doesn't release it. This can trigger the OOM killer. Here are the possible values of the parameter <b>vm.overcommit_memory<\/b> with a description for each:<\/p>\n<ol>\n<li> Heuristic overcommit (default); kernel-based heuristic<\/li>\n<li> Allow overcommit in all cases<\/li>\n<li> Don't overdo it, don't exceed the overcommit ratio.<\/li>\n<\/ol>\n<p>\n<i>Link: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.kernel.org\/doc\/Documentation\/vm\/overcommit-accounting\">https:\/\/www.kernel.org\/doc\/Documentation\/vm\/overcommit-accounting<\/a><\/noindex><\/i><\/p>\n<p><b>vm.overcommit_ratio<\/b> \u2014 percentage of memory available for overcommitting. A value of 50% in a 2 GB RAM system can allocate up to 3 GB of RAM.<\/p>\n<p>A value of 2 for vm.overcommit_memory provides better performance for PostgreSQL. This value maximizes the use of memory by the server process without significant risk of being killed by the OOM killer. The application can restart, but only within the overcommit range, reducing the risk that the OOM killer will terminate the process. Therefore, a value of 2 offers better performance than the default value of 0. However, reliability can be improved by avoiding memory overload beyond the allowable range, thus eliminating the risk of the process being killed by the OOM killer.<\/p>\n<p>In systems without swap, a vm.overcommit_memory value of 2 can cause issues.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT\">https:\/\/www.postgresql.org\/docs\/current\/static\/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT<\/a><\/noindex><\/p>\n<h3>vm.dirty_background_ratio \/ vm.dirty_background_bytes<\/h3>\n<p>\n<b>vm.dirty_background_ratio<\/b> \u2014 is the percentage of memory occupied by dirty pages that need to be written to disk. The flushing to disk is done in the background. This parameter ranges from 0 to 100; however, a value below 5 may be ineffective and some kernels do not support it. 10 is the default value in most Linux systems. You can improve performance for write-intensive operations with a smaller ratio, which would mean that Linux will flush dirty pages to disk in the background.<\/p>\n<p>You need to set the value <b>vm.dirty_background_bytes<\/b> based on your disk speed.<\/p>\n<p>There are no 'good' values for these two parameters, as both depend on the hardware. However, setting vm.dirty_background_ratio to 5 and vm.dirty_background_bytes to 25% of the disk speed improves performance by ~25% in most cases.<\/p>\n<h3>vm.dirty_ratio \/ dirty_bytes<\/h3>\n<p>\nThis is the same as <b>vm.dirty_background_ratio \/ dirty_background_bytes<\/b>, except that flushing occurs during the active session, blocking the application. Therefore, vm.dirty_ratio should be higher than <b>vm.dirty_background_ratio<\/b>. This ensures that background processes run earlier to avoid potential blocking of the application. You can adjust the difference between these two ratios based on disk I\/O load.<\/p>\n<h2>Summary<\/h2>\n<p>\nYou can adjust other parameters to enhance performance, but the improvements will be minimal and you won't gain much benefit. We must remember that not all parameters apply to every type of application. Some applications perform better when certain parameters are adjusted, while others do not. You need to find the right balance between the configurations of these parameters for the expected workload and application type, while also considering the behavior of the operating system during the setup. Configuring kernel parameters is not as straightforward as adjusting database settings: it is more complicated to provide recommendations here.<br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458860\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c PostgreSQL \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041f\u043b\u043e\u0445\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 \u041e\u0421 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0434\u0440\u0430 Linux, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26870,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35920","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u0430 Linux \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:07:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Configuring Linux Kernel Parameters for PostgreSQL Optimization | ProHoster","description":"Optimal Performance.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u0430 Linux \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 PostgreSQL | ProHoster","og:description":"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/nastrojka-parametrov-yadra-linux-dlya-optimizatsii-postgresql","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:07:35+00:00","article:modified_time":"2019-10-31T19:07:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35920","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:53:32","updated":"2026-01-22 01:17:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/35920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=35920"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/35920\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/26870"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=35920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=35920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=35920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}