Postgresql服務(wù)配置

配置參數(shù)

PostgreSQL的配置參數(shù)是在postgresql.conf文件中集中管理的, 該文件位于數(shù)據(jù)庫實(shí)例的目錄($PGDATA) 下。
此文件中的每個(gè)參數(shù)配置項(xiàng)的格式都是“參數(shù)名=參數(shù)值”,格式如下面的配置項(xiàng):

# 注釋
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB

配置文件中可以使用“#”進(jìn)行注釋池磁。
所有配置項(xiàng)的參數(shù)名都是大小寫不敏感的。

參數(shù)值有以下5種數(shù)據(jù)類型:

  • 布爾: 布爾值都是大小寫無關(guān)的, 可以是on码邻、 off、 true另假、 false像屋、 yes、 no边篮、 1己莺、 0。
  • 整數(shù): 數(shù)值可以指定單位戈轿, 如一些內(nèi)存配置的參數(shù)可以指定KB凌受、 MB、 GB等單位凶杖。
  • 浮點(diǎn)數(shù): 可以指定小數(shù)的數(shù)值胁艰, 如“1.0”。
  • 字符串: 單引號(hào)包起來的字符串智蝠, 如'csvlog'腾么。
  • 枚舉: 不需要單引號(hào)引起來的字符串。

postgresql.conf文件中還可以使用include指令包含其他文件中的配置內(nèi)容

include 'filename

如果指定被包含的文件名不是絕對(duì)路徑杈湾, 那么就是相對(duì)于當(dāng)前配置文件所在目錄的相對(duì)路徑解虱。
包含還可以被嵌套。

所有的配置參數(shù)都在系統(tǒng)視圖“pg_settings”中漆撞,
例如當(dāng)不知道枚舉類型的配置參數(shù)“client_min_messages”可以取哪些值時(shí)殴泰, 可用如下語句查詢:

select enumvals from pg_settings where name = 'client_min_messages';

再如當(dāng)不知道參數(shù)“autovacuum_vacuum_cost_delay”的時(shí)間單位時(shí)于宙, 可以使用如下命令查詢:

select unit from pg_settings where name = 'autovacuum_vacuum_cost_delay';

關(guān)于參數(shù)“autovacuum_vacuum_cost_delay”的描述可以使用如下命令查詢:

select short_desc,extra_desc from pg_settings where name = 'autovacuum_vacuum_cost_delay';

參數(shù)的訪問和設(shè)置也有多種情況, 有些參數(shù)發(fā)生改變后必須重啟服務(wù)器才能生效悍汛, 有些參數(shù)可以直接修改捞魁, 還有一些參數(shù)只有超級(jí)用戶才有權(quán)限修改。
在PostsgreSQL中把參數(shù)分為以下幾類:

  • internal: 這類參數(shù)是只讀參數(shù)离咐, 其中谱俭, 有些參數(shù)是postgres程序?qū)懰赖模?或者是用不同的編輯選項(xiàng)確定的; 有些參數(shù)是數(shù)據(jù)庫實(shí)例初使化時(shí)就確定了的宵蛀, 比如創(chuàng)建實(shí)例時(shí)運(yùn)行initdb昆著, 可以使用一些命令行參數(shù)選項(xiàng)來確定某些參數(shù)的值, 如可以在initdb中使用-k把參數(shù)“data_checksums”初使化為“on”术陶, 之后就不能再改變此參數(shù)值了凑懂。 這類參數(shù)值不能在postgresql.conf中配置, 因?yàn)樗鼈兪怯蓀ostgres程序或在初始化實(shí)例時(shí)寫死的梧宫。
  • postmaster: 改變這類參數(shù)的值需要重啟PostgreSQL實(shí)例接谨。 在postgresql.conf文件中可改變這些參數(shù)后, 需要重啟PostgreSQL實(shí)例修改才能生效祟敛。
  • sighup: 在postgresql.conf文件中改變這類參數(shù)的值不需要重啟數(shù)據(jù)庫疤坝, 只需要向postmaster進(jìn)程發(fā)送SIGHUP信號(hào), 讓其重啟裝載配置新的參數(shù)值就可以了馆铁。 當(dāng)然postmaster進(jìn)程接收到SIGHUP信號(hào)后跑揉, 也會(huì)向它的子進(jìn)程發(fā)送SIGHUP信號(hào), 讓新的參數(shù)值在所有的進(jìn)程中生效埠巨。
  • backend: 在postgresql.conf文件中更改這類設(shè)置無須重新啟動(dòng)服務(wù)器历谍, 只需要向postmaster發(fā)送一個(gè)SIGHUP信號(hào), 讓它重新讀取postgresql.conf文件中新的配置值辣垒, 但新的配置值只會(huì)出現(xiàn)在修改之后的新連接中望侈, 已有的連接中該參數(shù)的值不會(huì)改變。 這類參數(shù)的值也可以在新建連接時(shí)由連接的一些參數(shù)改變勋桶。 例如脱衙, 通過libpq的PGOPTIONS環(huán)境變量可以改變本連接的配置值。
  • superuser: 這類參數(shù)可以由超級(jí)用戶使用SET命令來改變例驹, 如檢測(cè)死鎖的超時(shí)時(shí)間的參數(shù)“deadlock_timeout”捐韩。 而超級(jí)用戶改變此參數(shù)值時(shí)只會(huì)影響自身的sesssion配置, 不會(huì)影響其他用戶關(guān)于此參數(shù)的配置鹃锈。 向Postmaster進(jìn)程發(fā)送SIGHUP信號(hào)也只會(huì)影響后續(xù)創(chuàng)建的連接荤胁, 不會(huì)影響已有的連接。
  • user: 這類參數(shù)可以由普通用戶使用SET命令來改變本連接中的配置值屎债。 除了普通用戶也可以改變外仅政, 這類參數(shù)與superuser類參數(shù)沒有區(qū)別垢油。

可以通過查詢pg_settings表中的context字段值來了解改變參數(shù)在postgresql.conf文件中的配置值時(shí), 是否需要重啟數(shù)據(jù)庫圆丹。例如要想知道改變參數(shù)“wal_buffers”的值是否需要重啟數(shù)據(jù)庫:

select name,context from pg_settings where name like 'wal_buffers';

上例查詢返回的結(jié)果是“postmaster”滩愁, 說明此參數(shù)值修改后必須重啟服務(wù)器才會(huì)生效。
要想知道改變參數(shù)“l(fā)ocal_preload_libraries”的值是否需要重啟數(shù)據(jù)庫辫封, 可用如下SQL語句查詢:

select name,context from pg_settings where name like 'local_preload_libraries';

上例得出的參數(shù)類型是“backend”惊楼, 說明此參數(shù)值修改后不需要重啟數(shù)據(jù)庫, 只需要運(yùn)行pg_ctl reload命令就可以了:

pg_ctl reload -D /home/osdba/pgdata

與連接相關(guān)的配置項(xiàng)

連接數(shù)據(jù)庫相關(guān)的配置項(xiàng)有以下幾種:

  • listen_addresses: string類型秸讹, 聲明服務(wù)器監(jiān)聽客戶端連接的TCP/IP地址, 改變此參數(shù)需要重啟數(shù)據(jù)庫服務(wù)雅倒。
    如果主機(jī)有多個(gè)IP地址璃诀, 則讓PostgreSQL服務(wù)在多個(gè)IP地址上監(jiān)聽, 該參數(shù)的配置值就是由逗號(hào)分隔的多個(gè)IP地址值或IP地址值對(duì)應(yīng)的主機(jī)名組成的一個(gè)列表蔑匣。
    通常把此項(xiàng)配置為“*”劣欢, 表示在本機(jī)的所有IP地址上監(jiān)聽。
    當(dāng)然也可以配置成“0.0.0.0”裁良, 它與“*”相同凿将, 也表示在本機(jī)所有的IP地址上監(jiān)聽。
    如果這個(gè)列表是空的价脾, 那么服務(wù)器不會(huì)監(jiān)聽任何IP地址牧抵, 在這種情況下, 只有UNIX域套接字可以連接到數(shù)據(jù)庫侨把。
    此參數(shù)的默認(rèn)值是“l(fā)ocalhost”犀变, 表示只允許本地使用“l(fā)oopback”連接到數(shù)據(jù)庫, 其他機(jī)器無法連接秋柄。
    更精細(xì)的控制項(xiàng)获枝, 如哪些IP或哪些網(wǎng)段可以連接服務(wù)器, 是由配置文件“pg_hba.conf”來控制的骇笔。
    當(dāng)然省店, listen_addresses也可以控制只在一個(gè)特定的IP地址上監(jiān)聽, 所以可以有針對(duì)性地阻止不安全網(wǎng)卡的惡意連接請(qǐng)求笨触。

  • port: integer類型懦傍, 指定服務(wù)器監(jiān)聽的TCP端口, 默認(rèn)為“5432”旭旭。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)谎脯。
    請(qǐng)注意, 同一個(gè)端口號(hào)用于服務(wù)器監(jiān)聽的所有IP地址持寄。

  • max_connections: integer類型源梭, 允許與數(shù)據(jù)庫連接的最大并發(fā)連接數(shù)娱俺。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)。
    默認(rèn)值通常是“100”废麻, 但是如果內(nèi)核設(shè)置不支持(在initdb時(shí)判斷)荠卷, 該值可能會(huì)小于這個(gè)數(shù)。
    這個(gè)參數(shù)只能在服務(wù)器啟動(dòng)的時(shí)候設(shè)置烛愧。
    增大該參數(shù)可能會(huì)讓PostgreSQL申請(qǐng)更多的System V共享內(nèi)存或信號(hào)燈油宜, 可能會(huì)因超過操作系統(tǒng)默認(rèn)配置值而導(dǎo)致實(shí)例無法啟動(dòng)。 當(dāng)運(yùn)行HOT Standby服務(wù)器時(shí)怜姿, 該參數(shù)必須大于或等于主服務(wù)器上的參數(shù)慎冤, 否則HOT Standby服務(wù)器上可能無法執(zhí)行查詢操作。

  • superuser_reserved_connections: integer類型沧卢, 決定為PostgreSQL超級(jí)用戶連接而保留的連接數(shù)蚁堤。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)。 默認(rèn)值是“3”但狭。
    設(shè)置該參數(shù)的目的在于防止因普通用戶消耗掉允許的所有連接而導(dǎo)致超級(jí)用戶無法連接到數(shù)據(jù)庫披诗。
    普通用戶最多建max_connections-superuser_reserved_connections個(gè)連接后就不再允許連接數(shù)據(jù)庫了, 這時(shí)超級(jí)用戶還可以連接到數(shù)據(jù)庫立磁。
    該值必須小于max_connections的值呈队。

  • unix_socket_directory: string類型, 聲明服務(wù)器監(jiān)聽客戶端連接的UNIX域套接字目錄唱歧。
    該參數(shù)只能在編譯時(shí)修改宪摧。
    默認(rèn)值通常是“/tmp”。
    除了套接字文件本身迈喉, 名為“.s.PGSQL.nnnn”“.s.PGSQL.nnnn.lock”(nnnn是服務(wù)器的端口號(hào)) 的文件會(huì)在unix_socket_directory路徑下創(chuàng)建绍刮, 這兩個(gè)文件都不應(yīng)被手動(dòng)刪除。
    Windows下沒有UNIX域套接字挨摸, 因此該參數(shù)與Windows無關(guān)孩革。

  • unix_socket_group: string類型, 設(shè)置UNIX域套接字的所屬組(套接字的所屬用戶總是啟動(dòng)服務(wù)器的用戶) 得运。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)膝蜈。
    可以與選項(xiàng)“unix_socket_permissions”一起用于對(duì)套接字進(jìn)行訪問控制。
    默認(rèn)是一個(gè)空字符串熔掺, 表示啟動(dòng)服務(wù)器的用戶所屬的默認(rèn)組饱搏。
    該選項(xiàng)只能在服務(wù)器啟動(dòng)時(shí)設(shè)置。
    Windows下沒有UNIX域套接字置逻, 因此該參數(shù)與Windows無關(guān)推沸。

  • unix_socket_permissions: integer類型, 設(shè)置UNIX域套接字的訪問權(quán)限。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)鬓催。
    UNIX域套接字文檔的權(quán)限與普通的UNIX文件系統(tǒng)權(quán)限相同肺素, 該選項(xiàng)的值應(yīng)該是數(shù)值形式, 也就是chmod函數(shù)和umask函數(shù)中接受的形式宇驾。
    如果使用八進(jìn)制格式倍靡, 數(shù)字必須以0開頭。
    默認(rèn)的權(quán)限是“0777”课舍, 意思是任何用戶都可以連接塌西。
    通常合理的設(shè)置也可能是“0770”(只有用戶和同組的用戶可以訪問)和“0700”(只有用戶自己可以訪問) 。
    需要注意的是筝尾, 對(duì)于UNIX域套接字捡需, 只有寫權(quán)限有意義, 讀和執(zhí)行權(quán)限沒有任何意義筹淫。
    Windows下沒有UNIX域套接字栖忠, 因此該參數(shù)與Windows無關(guān)。

  • bonjour: boolean類型贸街, Bonjour也稱為零配置聯(lián)網(wǎng), 是蘋果電腦公司的一個(gè)服務(wù)器搜索協(xié)議狸相, 此參數(shù)表示是否讓Bonjour搜索到PostgreSQL服務(wù)薛匪。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)。
    默認(rèn)值是“off”脓鹃。

  • bonjour_name: string類型逸尖, 聲明Bonjour服務(wù)名稱。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)瘸右。
    默認(rèn)值為空字符串娇跟, 表示使用本機(jī)名。
    如果編譯時(shí)沒有打開Bonjour支持太颤, 那么將忽略該參數(shù)苞俘。

  • tcp_keepalives_idle: integer類型, 表示在一個(gè)TCP連接中空閑多長(zhǎng)時(shí)間后會(huì)發(fā)送一個(gè)keepalive報(bào)文龄章。
    默認(rèn)值為“0”吃谣, 表示使用操作系統(tǒng)設(shè)置的默認(rèn)值, 因?yàn)閃indows不支持讀取系統(tǒng)默認(rèn)值做裙, 在Windows操作系統(tǒng)上此值若設(shè)置為“0”岗憋, 系統(tǒng)會(huì)將該參數(shù)設(shè)置為2小時(shí)。
    該參數(shù)只有在支持TCP_KEEPIDLE或TCP_KEEPALIVE功能的操作系統(tǒng)上才可用锚贱, 如Windows和Linux仔戈。
    在不支持此功能的操作系統(tǒng)上必須設(shè)置為“0”。
    此參數(shù)只對(duì)TCP連接有用,UNIX域套接連接會(huì)忽略該參數(shù)监徘。

  • tcp_keepalives_interval: integer類型晋修, 在一個(gè)空閑TCP連接中, 定義在發(fā)送第一個(gè)TCP keepalive包后耐量, 如果在該參數(shù)給定的時(shí)間間隔內(nèi)沒有收到對(duì)端的回包飞蚓, 則開始發(fā)送第二個(gè)TCP keepalive包, 若在給定的時(shí)間間隔內(nèi)仍未收到回包的話則發(fā)送第三個(gè)keepalive包廊蜒,直到達(dá)到tcp_keepalives_count次后都沒有收到回包趴拧, 則認(rèn)為連接已中斷, 關(guān)閉連接山叮。
    若指定為“0”著榴, 即表示使用操作系統(tǒng)設(shè)置的默認(rèn)值, 但在Windows操作系統(tǒng)上屁倔, 因?yàn)閃indows不支持讀取系統(tǒng)默認(rèn)值脑又, 此值若設(shè)置為“0”, 系統(tǒng)會(huì)將該參數(shù)設(shè)置為1秒锐借。
    該參數(shù)只有在支持TCP_KEEPIDLE或TCP_KEEPALIVE功能的操作系統(tǒng)上才可用问麸, 如Windows和Linux。
    在不支持此功能的操作系統(tǒng)上钞翔, 必須設(shè)置為“0”严卖。
    此參數(shù)只對(duì)TCP連接有用, UNIX域套接連接會(huì)忽略該參數(shù)布轿。

  • tcp_keepalives_count: integer類型哮笆, 在一個(gè)空閑TCP連接上, 發(fā)送keepalive包后汰扭, 如果一直沒有收到對(duì)端的回包稠肘, 最多發(fā)送keepalive次報(bào)文后就認(rèn)為TCP連接已中斷媳纬。
    若指定為“0”吃度, 即表示使用操作系統(tǒng)設(shè)置的默認(rèn)值。
    該參數(shù)只有在支持TCP_KEEPCNT功能的操
    作系統(tǒng)上才可用僻他, 在不支持此功能的操作系統(tǒng)上笆包, 必須設(shè)置為“0”鲁冯。
    Windows操作系統(tǒng)也
    不支持此參數(shù), 所以也必須設(shè)置為“0”色查。
    此參數(shù)只對(duì)TCP連接有用薯演, UNIX域套接連接會(huì)忽略該參數(shù)。

在上面的參數(shù)中秧了, 需要注意的是TCP的keepalive參數(shù)的設(shè)置跨扮, 在Linux環(huán)境下, 通常要把tcp_keepalives_idle設(shè)置為較短的時(shí)間值。
默認(rèn)設(shè)置為“0”時(shí)衡创, 使用操作系統(tǒng)的設(shè)置值帝嗡, 通常為7200秒, 即2小時(shí)璃氢, 這個(gè)時(shí)間間隔對(duì)于大多數(shù)應(yīng)用來說都太長(zhǎng)了哟玷, 所以需要設(shè)置為較短的時(shí)間值, 如下面的配置:

tcp_keepalives_idle = 180
tcp_keepalives_interval = 10
tcp_keepalives_count = 3

內(nèi)存配置項(xiàng)

在PostgreSQL中主要有以下幾個(gè)內(nèi)存配置參數(shù)一也。

  • shared_buffers: integer類型巢寡, 設(shè)置數(shù)據(jù)庫服務(wù)器將使用的共享內(nèi)存緩沖區(qū)數(shù)量, 此緩沖區(qū)為數(shù)據(jù)塊的緩存使用椰苟。
    此緩沖區(qū)是放在共享內(nèi)存中的抑月。
    每個(gè)緩沖區(qū)大小的典型值是8KB, 除非在編譯時(shí)修改了BLCKSZ的值舆蝴。
    默認(rèn)值通常是“4000”谦絮, 對(duì)于8KB的數(shù)據(jù)塊則共享內(nèi)存緩沖區(qū)大小為4000×8KB≈32MB。
    這個(gè)數(shù)值必須大于16洁仗, 并且至少是max_connections數(shù)值的兩倍层皱。
    通常會(huì)把此值設(shè)置得大一些, 這樣可以改進(jìn)性能赠潦。
    在安裝生產(chǎn)系統(tǒng)時(shí)奶甘, 建議至少將該值設(shè)置為幾千。
    如果有專用的1GB或更多內(nèi)存的數(shù)據(jù)庫服務(wù)器祭椰, 一個(gè)合理的shared_buffers開始值可以是物理內(nèi)存的25%。 但把shared_buffers設(shè)置得太大疲陕, 如超過物理內(nèi)存的40%后方淤, 就會(huì)發(fā)現(xiàn)緩存的效果并不明顯, 這是因?yàn)镻ostgreSQL是運(yùn)行在文件系統(tǒng)之上的蹄殃, 若文件系統(tǒng)也有緩存携茂, 將導(dǎo)致雙緩存過多, 產(chǎn)生負(fù)面影響诅岩。
    通常情況下讳苦, 將share_buffers設(shè)置為物理內(nèi)存的25%, 而把更多的內(nèi)存留給文件系統(tǒng)的緩存吩谦。
    在Windows環(huán)境下也是如此鸳谜。
    在早期的PostgreSQL版本下, 增大該參數(shù)的值可能會(huì)要求更多System V共享內(nèi)存式廷, 可能會(huì)超出操作系統(tǒng)共享內(nèi)存配置參數(shù)允許的大小咐扭。

  • temp_buffers: integer類型, 設(shè)置每個(gè)數(shù)據(jù)庫會(huì)話使用的臨時(shí)緩沖區(qū)的最大數(shù)目。
    此本地緩沖區(qū)只用于訪問臨時(shí)表蝗肪。
    臨時(shí)緩沖區(qū)是在某個(gè)連接會(huì)話的服務(wù)進(jìn)程中分配的袜爪, 屬于本地內(nèi)存。
    臨時(shí)緩沖區(qū)的大小也是按數(shù)據(jù)塊大小來分配的薛闪, 默認(rèn)值是“1000”辛馆, 對(duì)于8KB的數(shù)據(jù)塊大小為8MB。
    每個(gè)會(huì)話可以使用SET命令改變此設(shè)置值豁延, 但是必須在會(huì)話第一次使用臨時(shí)表前設(shè)置才有效昙篙, 一旦使用了臨時(shí)表, 再改變?cè)摂?shù)值將是無效的术浪。
    并不是一啟動(dòng)會(huì)話就分配這么多臨時(shí)緩沖區(qū)的內(nèi)存瓢对, 而是按需分配, 在需要時(shí)才分配實(shí)際的臨時(shí)緩沖區(qū)內(nèi)
    存胰苏。
    如果在一個(gè)并不需要大量臨時(shí)緩沖區(qū)的會(huì)話里設(shè)置一個(gè)較大的數(shù)值硕蛹, 它的開銷只是一個(gè)緩沖區(qū)描述符, 每個(gè)BLOCK就會(huì)增加大約64B的內(nèi)存用于存儲(chǔ)緩沖區(qū)描述符硕并。

  • work_mem: integer類型法焰, 聲明內(nèi)部排序操作和Hash表在開始使用臨時(shí)磁盤文件之前使用的內(nèi)存數(shù)目。
    這個(gè)內(nèi)存也是本地內(nèi)存倔毙, 以千字節(jié)為單位埃仪, 默認(rèn)是1024 KB(1MB) 。
    請(qǐng)注意陕赃, 對(duì)于復(fù)雜的查詢卵蛉, 可能會(huì)同時(shí)并發(fā)運(yùn)行多個(gè)排序或散列(Hash) 操作; 每個(gè)排序或散列操作都會(huì)分配該參數(shù)聲明的內(nèi)存來存儲(chǔ)中間數(shù)據(jù)么库, 只有存不下時(shí)才會(huì)使用臨時(shí)文件傻丝。
    同樣, 多個(gè)正在運(yùn)行的會(huì)話可能會(huì)同時(shí)進(jìn)行排序操作诉儒, 因此使用的總內(nèi)存可能是work_mem的好幾倍葡缰。 ORDER BY、 DISTINCT和MERGE JOINS都要用到排序操作忱反。
    Hash表在Hash Join泛释、 以Hash為基礎(chǔ)的聚集、 以Hash為基礎(chǔ)的IN子查詢處理中也都要用到排序温算。

  • maintenance_work_mem: integer類型怜校, 聲明在維護(hù)性操作, 比如VACUUM注竿、 CREATE INDEX和ALTER TABLE ADD FOREIGN KEY中使用的最大內(nèi)存數(shù)以KB為單位韭畸, 默認(rèn)是16MB宇智。
    在一個(gè)數(shù)據(jù)庫會(huì)話里, 只有這樣的操作可以執(zhí)行胰丁, 并且一個(gè)數(shù)據(jù)庫實(shí)例通常不會(huì)有太多這樣的工作并發(fā)執(zhí)行随橘, 通常把該數(shù)值設(shè)置得比work_mem大一些較為合適。
    更大的設(shè)置可以提高上述操作的執(zhí)行效率锦庸。
    注:配置AutoVacuum后机蔗, 達(dá)到autovacuum_max_workers的時(shí)間, 內(nèi)存會(huì)被分配甘萧, 因此也不要將默認(rèn)值設(shè)置得太大萝嘁, 而當(dāng)需要手動(dòng)執(zhí)行上述操作時(shí), 可以使用SET命令把此參數(shù)值設(shè)置得大一些扬卷。

  • max_stack_depth: integer類型牙言, 聲明服務(wù)器的執(zhí)行堆棧的最大安全深度。
    此設(shè)置默認(rèn)為2MB怪得, 如果發(fā)現(xiàn)不能運(yùn)行復(fù)雜的函數(shù)時(shí)咱枉, 可以適當(dāng)提高此配置的值, 不過通常情況
    下保持默認(rèn)值就足夠了徒恋。
    把max_stack_depth參數(shù)設(shè)置得大于實(shí)際的操作系統(tǒng)內(nèi)核限制值時(shí)蚕断, 意味著一個(gè)正在運(yùn)行的遞歸函數(shù)可能會(huì)導(dǎo)致PostgreSQL后臺(tái)服務(wù)進(jìn)程崩潰。
    在一些操作系統(tǒng)平臺(tái)上入挣, PostgreSQL能夠檢測(cè)出內(nèi)核限制亿乳, 這時(shí)PostgreSQL將不允許其設(shè)置為一個(gè)不安全的值。
    但PostgreSQL并不能在所有的操作系統(tǒng)平臺(tái)上都能檢測(cè)出操作系統(tǒng)的內(nèi)核限制值径筏, 所以建議還是設(shè)置一個(gè)明確的值葛假。

預(yù)寫式日志的配置項(xiàng)

  • wal_level: enum類型, 可以選擇的值為“minimal”“replica”“l(fā)ogical”滋恬, 此配置項(xiàng)決定了多少信息寫入WAL日志中聊训。
    改變?cè)搮?shù)需要重啟數(shù)據(jù)庫服務(wù)。
    默認(rèn)值是“minimal”夷恍,即只寫入在數(shù)據(jù)庫崩潰或突然關(guān)機(jī)后進(jìn)行恢復(fù)時(shí)所需要的信息。
    設(shè)置為“replica”媳维, 則會(huì)添加一些備庫只讀查詢時(shí)需要的信息酿雪。
    當(dāng)執(zhí)行“CREATE TABLE AS”“CREATE INDEX”“CLUSTER”和“COPY into tables”等批量操作時(shí), 如果wal_level設(shè)置為“minimal”侄刽, 那么批量操作只會(huì)產(chǎn)生很少的WAL日志指黎, 原因是這些批量操作的具體過程可以安全地跳過, 并不會(huì)影響數(shù)據(jù)庫的恢復(fù)州丹, 但“minimal”級(jí)別的WAL不包括所有從基礎(chǔ)備份和WAL日志中重建數(shù)據(jù)的信息醋安。
    如果要搭建物理備庫杂彭, 需要把此參數(shù)設(shè)置為“replica”; 如果需要使用邏輯同步吓揪, 需要把此參數(shù)設(shè)置為“l(fā)ogical”亲怠。

  • fsync: boolean類型, 即是否使用fsync()系統(tǒng)調(diào)用(或等價(jià)調(diào)用) 把文件系統(tǒng)中的臟頁刷新到物理磁盤柠辞, 確保數(shù)據(jù)庫能在操作系統(tǒng)或者硬件崩潰的情況下恢復(fù)到一致的狀態(tài)团秽。
    改變?cè)搮?shù)需要重新裝載配置文件。
    此參數(shù)默認(rèn)值為“on”叭首, 大多數(shù)情況下都應(yīng)該把這個(gè)參數(shù)設(shè)置為“on”习勤。
    但當(dāng)此數(shù)據(jù)庫不是很重要, 或者此數(shù)據(jù)庫中的數(shù)據(jù)很容易在其他系統(tǒng)中重建時(shí)焙格, 為了提高性能图毕, 可以把此參數(shù)設(shè)置為“off”。
    例如眷唉, 從備份文件中初始加載一個(gè)新數(shù)據(jù)庫時(shí)予颤, 可以把此參數(shù)設(shè)置為“off”, 這樣可以提升重建的速度厢破。
    如果這個(gè)選項(xiàng)被關(guān)閉荣瑟, 那么可以考慮關(guān)閉full_page_writes, 因?yàn)榘裦sync設(shè)置為“off”后摩泪, 把full_page_writes設(shè)置為“on”也無法保證數(shù)據(jù)的安全性笆焰, 不如索性全部設(shè)置為“off”。

  • synchronous_commit: boolean類型见坑, 聲明提交一個(gè)事務(wù)是否需要等待其把WAL日志寫入磁盤后才返回嚷掠, 默認(rèn)值是“on”。
    為了事務(wù)的安全荞驴, 通常都應(yīng)當(dāng)設(shè)置為“on”不皆。
    不同于fsync, 將此參數(shù)設(shè)置為“off”不會(huì)產(chǎn)生數(shù)據(jù)庫不一致性的風(fēng)險(xiǎn)熊楼, 只會(huì)導(dǎo)致用戶已提交成功的最近的幾個(gè)事務(wù)丟失霹娄, 即在數(shù)據(jù)庫崩潰或突然關(guān)機(jī)后, 重啟數(shù)據(jù)庫時(shí)用戶會(huì)發(fā)現(xiàn)故障時(shí)間點(diǎn)附近的幾個(gè)事務(wù)實(shí)際上并沒有提交成功鲫骗, 而是回滾了犬耻, 而數(shù)據(jù)庫狀態(tài)是一致的。
    一般用戶可以直接改變此參數(shù)值执泰, 因此在提交一些不重要的事務(wù)時(shí)枕磁, 可以先把此參數(shù)設(shè)置為“off”, 然后再提交术吝, 這樣就可以提高數(shù)據(jù)庫性能计济。

  • wal_sync_method: enum類型茸苇, 用來指定向磁盤強(qiáng)制更新WAL日志數(shù)據(jù)的方法。
    一般保持默認(rèn)值就可以了沦寂。
    如果fsync設(shè)置為“off”学密, 那么該參數(shù)的設(shè)置就沒有意義。
    該參數(shù)的可選項(xiàng)有以下幾種:
    1.open_datasync: 使用O_DSYNC選項(xiàng)的open()函數(shù)打開WAL日志凑队, Linux操作系統(tǒng)不支持此選項(xiàng)则果。
    Windows下默認(rèn)使用此選項(xiàng)。
    2.fdatasync: 每次提交時(shí)調(diào)用fdatasync函數(shù)漩氨。
    Linux操作系統(tǒng)上默認(rèn)使用此選項(xiàng)西壮。
    fsync_writethrough: 每次提交時(shí)調(diào)用fsync()函數(shù), 同時(shí)把所有Cache都刷新到物理硬盤中叫惊。
    Linux操作系統(tǒng)不支持此選項(xiàng)款青。
    Windows下支持此選項(xiàng)。
    3.fsync: 每次提交時(shí)調(diào)用fsync()函數(shù)霍狰。
    大多數(shù)平臺(tái)都支持此選項(xiàng)抡草。
    4.open_sync: 使用O_SYNC選項(xiàng)的open()函數(shù)來打開WAL日志。
    大多數(shù)平臺(tái)都支持此選項(xiàng)蔗坯。

  • full_page_writes: boolean類型康震。
    打開該選項(xiàng)時(shí), PostgreSQL服務(wù)器會(huì)在檢查點(diǎn)( checkpoints) 之后對(duì)頁面進(jìn)行第一次修改時(shí)將整個(gè)頁面寫到WAL日志中宾濒。
    這樣做是因?yàn)樵诓僮飨到y(tǒng)崩潰過程中可能只有部分頁面寫入磁盤了腿短, 從而導(dǎo)致在同一個(gè)頁面中會(huì)有新舊數(shù)
    據(jù)混合的情況。
    在崩潰后的恢復(fù)期绘梦, 如果WAL日志中沒有記錄完整的頁橘忱, 且頁中的數(shù)據(jù)是新舊混合的, 則無法完全恢復(fù)該頁卸奉。
    把完整的頁面保存在WAL日志中就可以直接使用WAL日志中的頁覆蓋壞頁( 包含新舊混合的數(shù)據(jù)) 以完成恢復(fù)工作钝诚。
    此參數(shù)的默認(rèn)值為“on”, 為了數(shù)據(jù)安全榄棵, 通常使用該默認(rèn)設(shè)置凝颇。
    注:運(yùn)行到檢查點(diǎn)時(shí), 若頁面第一次被修改疹鳄, 則整個(gè)頁面會(huì)被寫入WAL日志中拧略, 但在下一個(gè)檢查點(diǎn)到來之后該頁面若再發(fā)生變化, 將不會(huì)再記錄整個(gè)頁面尚辑。
    也就是說辑鲤, 在兩個(gè)檢查點(diǎn)之間盔腔, 不管這個(gè)頁面變化了多少次杠茬, 只在第一次變化時(shí)記錄整個(gè)頁面到WAL日志中月褥, 后面的就不會(huì)再記錄了。
    所以瓢喉, 增加檢查點(diǎn)產(chǎn)生的時(shí)間間隔就能減少WAL的日志量宁赤。

  • wal_buffers: integer類型, 指定放在共享內(nèi)存中用于存儲(chǔ)WAL日志的緩沖區(qū)的數(shù)目栓票。
    默認(rèn)值為“8”决左, 即64KB。
    改變此參數(shù)需要重啟數(shù)據(jù)庫服務(wù)走贪。
    此參數(shù)設(shè)置值的大小只需要能夠保存一次事務(wù)生成的WAL數(shù)據(jù)即可佛猛, 這些數(shù)據(jù)在每次事務(wù)提交時(shí)都會(huì)寫入磁盤。
    通常此參數(shù)設(shè)置為8~128( 64KB~1MB) 坠狡。

  • wal_writer_delay: integer類型继找, 指定wal writer process把WAL日志寫入磁盤的周期。
    在每個(gè)周期中會(huì)把緩存中的WAL日志刷新到磁盤上逃沿, 休眠wal_writer_delay時(shí)間婴渡, 然后重復(fù)上述過程。
    默認(rèn)時(shí)間為200毫秒凯亮。
    當(dāng)把synchronous_commit參數(shù)設(shè)置為“on”時(shí)边臼, 實(shí)際上在每次事務(wù)提交時(shí)都會(huì)把緩存中的WAL日志刷新到磁盤上, 因此該參數(shù)通常在synchronous_commit參數(shù)設(shè)置為“off”時(shí)比較有用假消。
    當(dāng)synchronous_commit參數(shù)設(shè)置為“off”時(shí)柠并, wal_writer_delay參數(shù)的值決定了數(shù)據(jù)庫實(shí)例、 操作系統(tǒng)或硬件崩潰時(shí)置谦, 最多丟失多長(zhǎng)時(shí)間內(nèi)已提交事務(wù)的數(shù)據(jù)堂鲤。

  • commit_delay: integer類型, 指定向WAL緩沖區(qū)寫入記錄和將緩沖區(qū)刷新到磁盤上之間的時(shí)間延遲媒峡, 以微秒為單位瘟栖。
    非零的設(shè)置值允許多個(gè)事務(wù)共用一個(gè)fsync()系統(tǒng)調(diào)用刷新數(shù)據(jù)。
    如果系統(tǒng)負(fù)載足夠高谅阿, 那么在給出的時(shí)間間隔里半哟, 其他事務(wù)可能已經(jīng)準(zhǔn)備好提交了。
    但是如果沒有其他事務(wù)準(zhǔn)備提交签餐, 那么該延遲就是在浪費(fèi)時(shí)間寓涨。
    因此, 該延遲只在一個(gè)服務(wù)器進(jìn)程寫其提交日志時(shí)氯檐, 且至少commit_siblings個(gè)其他事務(wù)處于活躍狀態(tài)的情況
    下執(zhí)行戒良。
    默認(rèn)是“0”( 無延遲) 。

  • commit_siblin gs: integer類型冠摄, 在執(zhí)行commit_delay延遲時(shí)要求同時(shí)打開的最小并發(fā)事務(wù)數(shù)糯崎。
    默認(rèn)是“5”几缭。

錯(cuò)誤報(bào)告和日志項(xiàng)

通常在剛安裝完成的PostgreSQL中, 只需對(duì)打開日志項(xiàng)進(jìn)行如下設(shè)置沃呢, 其他項(xiàng)保持默認(rèn)值年栓, 就可以滿足用戶的大多數(shù)要求:

logging_collector = on

采用上述配置后, 基本上每天超過10MB大小時(shí)會(huì)生成一個(gè)日志文件薄霜, 因?yàn)榧词箾]有設(shè)置某抓, 也相當(dāng)于默認(rèn)設(shè)置了以下兩個(gè)參數(shù):

log_rotation_age = 1d
log_rotation_size = 10MB

每次重啟數(shù)據(jù)庫時(shí)也會(huì)生成一個(gè)新的日志文件。
在這種方式下惰瓜, PostgreSQL并不會(huì)自動(dòng)清理日志文件否副, 需要寫一個(gè)腳本程序來清理日志文件。

實(shí)際上崎坊, PostgreSQL數(shù)據(jù)庫也可以把日志發(fā)送到操作系統(tǒng)的syslog中副编, 或者多生成一個(gè)csv格式的日志, 此操作通過配置log_destination參數(shù)來完成流强。
如下配置就是把日志發(fā)送到syslog中:

log_destination = 'syslog'

如果是在Windows操作系統(tǒng)中痹届, 把日志發(fā)送到Windows的事件日志中的配置方法如下:

log_destination = 'eventlog'

如果想要生成一個(gè)csv格式的日志文件, 需要進(jìn)行如下配置:

logging_collector = on
log_destination = 'csvlog'

要生成csvlog打月, 需要打開“l(fā)ogging_collector”队腐, 如果在syslog和eventlog中生成日志, 則不需要打開“l(fā)ogging_collector”奏篙。

還有一種常用的日志方法是將PostgreSQL數(shù)據(jù)庫配置成保留固定數(shù)目的日志柴淘, 如保留一周的日志, 到了星期一秘通, 則把上星期一的日志覆蓋掉为严, 配置方法如下:

log_filename = 'postgresql-%u.log'
log_rotation_age = 1d
log_truncate_on_rotation = on

日志文件名只能是“postgresql-%u.log'”, 其中“%u”代表星期幾肺稀, 星期一到星期日對(duì)應(yīng)的值是1~7第股, 將log_truncate_on_rotation設(shè)置為“on”, 就會(huì)覆蓋上周的日志文件话原, 以此來保證只保留7天的日志文件夕吻, 示例如下:

postgresql-1.log
postgresql-2.log
postgresql-3.log
postgresql-4.log
postgresql-5.log
postgresql-6.log
postgresql-7.log

注:如果今天是星期三, postgresql-3.log是今天的文件繁仁, 而postgresql-4.log則是上星期四的文件涉馅。
這與Linux操作系統(tǒng)中的syslog日志文件是不一樣的, 在syslog日志中黄虱, “syslog”是當(dāng)前的日志文件稚矿, 而“syslog.1”是前一段時(shí)間的日志文件, “syslog.2”則是更早一段時(shí)間的日志文件, 也就是說晤揣,“syslog.N”中“N”(值為1偶翅, 2, 3碉渡, …) 的數(shù)值越大表示時(shí)間越早的日志文件。
而本示例中母剥, 這個(gè)數(shù)據(jù)僅代表星期幾滞诺。
在PostgreSQL數(shù)據(jù)庫中, 日志文件無法配置成如Linux中的syslog那種保持固定數(shù)目的方式环疼。

在上面的例子中习霹, “%u”代表星期幾, 這個(gè)格式符實(shí)際上就是C函數(shù)的strftime中的格式符炫隶。
可以在Linux下運(yùn)行命令“man strftime”來查詢這些格式串淋叶。
下面列出日志的配置項(xiàng):

  • log_destination: 前面提到過, 可以設(shè)置為“stderr”“csvlog”和“syslog”伪阶。

  • logging_collector: 可以設(shè)置為“on”或“off”煞檩。

  • log_directory: 日志輸出的路徑, 可以是絕對(duì)路徑或數(shù)據(jù)目錄的相對(duì)路徑栅贴。

  • log_filename: 文件名斟湃, 可以帶上格式字符串。

  • log_rotation_age: 日志超過多長(zhǎng)時(shí)間后就生成一個(gè)新的文件檐薯。

  • log_rotation_size: 日志超過多大時(shí)就生成一個(gè)新的文件凝赛。

  • log_truncate_on_rotation: 當(dāng)生成的新文件的文件名已經(jīng)存在時(shí), 是否覆蓋同名舊文件坛缕。
    注:只有基于時(shí)間的文件切換才會(huì)覆蓋墓猎, 服務(wù)器重啟時(shí)的文件切換并不會(huì)覆蓋。

  • syslog_facility: 該參數(shù)是設(shè)置了log_destination='syslog'后赚楚, 指定syslog的“facility”項(xiàng)毙沾。
    可以設(shè)置為L(zhǎng)OCAL0、 LOCAL1宠页、 LOCAL2搀军、 LOCAL3、 LOCAL4勇皇、 LOCAL5罩句、 LOCAL6、 LOCAL7中的一個(gè)值敛摘。

  • syslog_ident: 當(dāng)使用syslog時(shí)门烂, 用于在syslog日志中標(biāo)識(shí)PostgreSQL的程序名。
    默認(rèn)為“postgresql.conf”。

PostgreSQL數(shù)據(jù)庫也可以設(shè)置log的級(jí)別屯远, log的級(jí)別控制著記錄日志的多少蔓姚, 而log的級(jí)別由參數(shù)“l(fā)og_min_messages”來控制, 可以取值為: DEBUG5慨丐、 DEBUG4坡脐、 DEBUG3、DEBUG2房揭、 DEBUG1备闲、 INFO、 NOTICE捅暴、 WARNING恬砂、 ERROR、 LOG蓬痒、 FATAL泻骤、 PANIC, 級(jí)別排序越靠后梧奢, 則打印到日志文件中的內(nèi)容就越少狱掂。

PostgreSQL也有類似MySQL中的慢查日志功能, 也就是把一些運(yùn)行慢的SQL語句記錄到日志中亲轨, 在PostgreSQL中該功能是由參數(shù)“l(fā)og_min_duration_statement”來控制的符欠, 如果某個(gè)SQL語句的運(yùn)行時(shí)間大于或等于設(shè)定的毫秒數(shù), 那么該SQL語句和它運(yùn)行的時(shí)間就會(huì)被記錄到日志中瓶埋。 當(dāng)設(shè)置為“0”時(shí)希柿, 則所有運(yùn)行的SQL語句及其時(shí)間都會(huì)被記錄到日志文件中。

另外养筒, PostgreSQL也可以記錄一個(gè)SQL語句產(chǎn)生了一定級(jí)別的日志(通常是錯(cuò)誤日志曾撤, 也可以把該SQL語句記錄到日志中) , 這一功能是由參數(shù)“l(fā)og_min_error_statement”來控制的晕粪, 該參數(shù)的取值與log_min_messages的取值一樣挤悉, 可以取DEBUG5、 DEBUG4巫湘、 DEBUG3装悲、 DEBUG2、 DEBUG1尚氛、 INFO诀诊、 NOTICE、 WARNING阅嘶、 ERROR属瓣、 LOG载迄、 FATAL、 PANIC中的一個(gè)值抡蛙, 如果設(shè)置為“NOTICE”护昧, 這條SQL語句運(yùn)行時(shí)產(chǎn)生了NOTICE日志, 則該SQL語句也會(huì)被記錄到日志中粗截。
設(shè)置為“PANIC”惋耙, 則表示關(guān)閉該功能, 因?yàn)镾QL語句不可能生成“PANIC”日志熊昌。

PostgreSQL日志還可以控制是否記錄DDL绽榛、 DML或所有SQL語句, 該功能是由參數(shù)“l(fā)og_statement”來控制的浴捆。
當(dāng)設(shè)置為“none”時(shí), 不記錄SQL語句稿械。
當(dāng)設(shè)置為“ddl”時(shí)选泻, 記錄所有DDL語句。
當(dāng)設(shè)置為“mod”時(shí)美莫, 記錄INSERT页眯、 UPDATE、 DELETE厢呵、 TRUNCATE窝撵、 COPY FROM等, 如果PREPARE襟铭、 EXECUTE或EXPLAIN ANALYZE語句產(chǎn)生了更新碌奉, 這些語句也同樣會(huì)被記錄下來。
當(dāng)設(shè)置為“all”時(shí)寒砖, 則所有SQL語句都會(huì)被記錄赐劣, 如果使用了參數(shù)“l(fā)og_min_duration_statement”, 超過一定時(shí)間的SQL語句已在日志中被打印哩都, 而這些SQL語句又符合log_statement參數(shù)配置并要求輸出到日志中魁兼, 則SQL語句不會(huì)在日志中重復(fù)打印兩次, 只會(huì)打印一次漠嵌。

PostgreSQL中還有以下調(diào)試SQL執(zhí)行計(jì)劃及過程的日志參數(shù):

  • debug_print_parse: 設(shè)置為“on”時(shí)咐汞, 把SQL的解析樹打印到日志中。

  • debug_print_rewritten: 設(shè)置為“on”時(shí)儒鹿, 把SQL的查詢重寫打印到日志中化撕。

  • debug_print_plan: 設(shè)置為“on”時(shí), 把SQL的執(zhí)行計(jì)劃打印到日志中约炎。

  • debug_pretty_print: 是否縮進(jìn)上面3種日志以使其更易讀侯谁。

PostgreSQL還有很多日志開關(guān), 可以由用戶決定把哪些信息記錄到日志中:

  • log_checkpoints: 是否記錄checkpoint。

  • log_connections: 是否記錄客戶端的連接墙贱。

  • log_disconnections: 是否記錄客戶端斷開連接的信息热芹。

  • log_duration: 是否記錄每個(gè)已完成語句的持續(xù)時(shí)間, 對(duì)于使用擴(kuò)展查詢協(xié)議的客戶端惨撇, 語法分析伊脓、 綁定、 執(zhí)行魁衙, 每一步所用的時(shí)間都分別進(jìn)行記錄报腔。

  • log_hostname: 是否記錄客戶端的主機(jī)名。

  • log_lock_waits: 當(dāng)一個(gè)會(huì)話等待時(shí)間超過deadlock_timeout時(shí)剖淀, 是否記錄一條日志信
    息纯蛾。

當(dāng)SQL有排序、 臨時(shí)查詢結(jié)果或Hash時(shí)會(huì)生成臨時(shí)文件纵隔, 這些臨時(shí)文件有時(shí)會(huì)比較大翻诉, 需要進(jìn)行監(jiān)控, 可以設(shè)置參數(shù)“l(fā)og_temp_files”為一個(gè)整數(shù)值捌刮, 當(dāng)生成的臨時(shí)文件大于這個(gè)值時(shí)碰煌, 則把臨時(shí)文件的信息打印到日志文件中。

也可以控制輸出日志時(shí)每行的行頭固定輸出哪些信息绅作, 這是由參數(shù)“l(fā)og_line_prefix”來控制的芦圾, 該參數(shù)指定一個(gè)與printf函數(shù)類似的格式串。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俄认,一起剝皮案震驚了整個(gè)濱河市个少,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眯杏,老刑警劉巖稍算,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異役拴,居然都是意外死亡糊探,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門河闰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來科平,“玉大人,你說我怎么就攤上這事姜性〉苫郏” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵部念,是天一觀的道長(zhǎng)弃酌。 經(jīng)常有香客問我氨菇,道長(zhǎng),這世上最難降的妖魔是什么妓湘? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任查蓉,我火速辦了婚禮,結(jié)果婚禮上榜贴,老公的妹妹穿的比我還像新娘豌研。我一直安慰自己,他們只是感情好唬党,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布鹃共。 她就那樣靜靜地躺著,像睡著了一般驶拱。 火紅的嫁衣襯著肌膚如雪霜浴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天蓝纲,我揣著相機(jī)與錄音阴孟,去河邊找鬼。 笑死驻龟,一個(gè)胖子當(dāng)著我的面吹牛温眉,可吹牛的內(nèi)容都是我干的缸匪。 我是一名探鬼主播翁狐,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼凌蔬!你這毒婦竟也來了露懒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤砂心,失蹤者是張志新(化名)和其女友劉穎懈词,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辩诞,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坎弯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了译暂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抠忘。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖外永,靈堂內(nèi)的尸體忽然破棺而出崎脉,到底是詐尸還是另有隱情,我是刑警寧澤伯顶,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布囚灼,位于F島的核電站骆膝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灶体。R本人自食惡果不足惜阅签,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赃春。 院中可真熱鬧愉择,春花似錦、人聲如沸织中。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狭吼。三九已至层坠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刁笙,已是汗流浹背破花。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疲吸,地道東北人座每。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像摘悴,于是被迫代替她去往敵國(guó)和親峭梳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容