免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5130 | 回复: 7
打印 上一主题 下一主题

PostgreSQL的进程模型,为什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-20 02:24 |只看该作者 |倒序浏览
当postmaster被启动以后,接下来writer process,buffer process,和control process被创建。之后,每有一个客户端(psql或者pgadmin)连接,系统就为之产生一个服务进程。
我有如下问题:

(1)这样一个模型有什么好处?坏处?
顺便,进程的数目在一个系统中是有限的。这样一个模型是如何适应于并发程度很高的情形?这样的模型性能如何?为什么还会有这样的scale结果,如下连接:
http://tweakers.net/reviews/657/1

(2)为什么不使用线程呢?

谢。

论坛徽章:
0
2 [报告]
发表于 2007-04-21 08:55 |只看该作者
1。可以用CONNECION POOL, 很多接口如JDBC都有提供啊,也有第三方软件支持啊。
2。至于为什么不用线程,请看POSTGRESQL官方的说明
http://www.postgresql.org/docs/faqs.TODO.html

All backends running as threads in a single process (not wanted)
This eliminates the process protection we get from the current setup. Thread creation is usually the same overhead as process creation on modern systems, so it seems unwise to use a pure threaded model.

论坛徽章:
0
3 [报告]
发表于 2007-04-21 09:24 |只看该作者
(1)"很多接口如JDBC都有提供啊,也有第三方软件支持啊。"你的意思是说JDBC提供一个pool(包含M个进程),M小于用户最大许可并发数目。是这样吗?
(2)对于thread和process的creation on modern systems,我可能看到的都是古董文献了,还是有一定差别的,另外这个创建的负担通常也可以说是一次性的,更加经常的负担是进程切换的开销。我感觉能解释过去的地方是:似乎线程可以不用付出更多的交换,但是transaction Manager并不是总能使得某个线程被I/O阻塞,其他线程就能够跑的欢。结局可能仍然是需要将进程切换。不知道我的想法是对是错,或者还有更好的解释。
(3)是什么原因使得postgresql的scale性能高过mysql呢?和进程的模型有没有关系?有,是怎么一回事儿?(mysql目前还每有完整的Transaction Manager)
(4)进程模型有利资源独立,资源独立和保护,到底保护了什么?

谢谢二楼的回答。

论坛徽章:
0
4 [报告]
发表于 2007-04-21 19:11 |只看该作者
楼主应该也去问问oracle的开发人员,用同一个问题。

论坛徽章:
0
5 [报告]
发表于 2007-04-21 22:38 |只看该作者
4楼,不是在上海了吗?

论坛徽章:
0
6 [报告]
发表于 2007-04-22 18:39 |只看该作者
原帖由 grizzly 于 2007-4-21 09:24 发表
(1)"很多接口如JDBC都有提供啊,也有第三方软件支持啊。"你的意思是说JDBC提供一个pool(包含M个进程),M小于用户最大许可并发数目。是这样吗?
(2)对于thread和process的creation on modern systems,我可能看到的都是古董文献了,还是有一定差别的,另外这个创建的负担通常也可以说是一次性的,更加经常的负担是进程切换的开销。我感觉能解释过去的地方是:似乎线程可以不用付出更多的交换,但是transaction Manager并不是总能使得某个线程被I/O阻塞,其他线程就能够跑的欢。结局可能仍然是需要将进程切换。不知道我的想法是对是错,或者还有更好的解释。
(3)是什么原因使得postgresql的scale性能高过mysql呢?和进程的模型有没有关系?有,是怎么一回事儿?(mysql目前还每有完整的Transaction Manager)
(4)进程模型有利资源独立,资源独立和保护,到底保护了什么?

谢谢二楼的回答。  


1. 因为数据库差异性, 连接数据库时候, 首选使用odbc, ole db, jdbc标准进行操作. 使用标准的scalar functiong, 元信息进行操作. 但是这些操作更好的办法通过"中间件"完成. "中间件"近几年的发展还是相当不错.
2. mysql 5已经支持事务了, 而且对于分布式事务支持的相当到位.
3. 关于进程模型, 线程模型, 裸设备.  postgresql官方网站说: 目前没有足够的证据, 说明带来的性能提升. 而且, 大部分操作系统, 不能有效保护线程的资源, 一个进程内, 某个线程的崩溃会造成数据库整个垮掉. 而采用多进程模型, 可以有效降低这种崩溃带来的负面影响.
4. 性能的衡量有时候很复杂, 因为各种数据库使用不同事务处理算法, postgresql和oracle都使用了并发版本控制技术, 加上不同数据库的缓冲区策略, 数据库对象锁粒度等都会影响到实际运行效果. 因此, 数据库设计和数据库调优, 都是非常复杂与困难的事情.

论坛徽章:
0
7 [报告]
发表于 2007-04-23 10:07 |只看该作者
谢谢6楼的回答。顺便离题问一句:postgresql的分布式事务支持如何。

论坛徽章:
0
8 [报告]
发表于 2007-04-23 10:38 |只看该作者
原帖由 grizzly 于 2007-4-23 10:07 发表
谢谢6楼的回答。顺便离题问一句:postgresql的分布式事务支持如何。



mysql的语法是符合标准的.
但是postgresql好像还太不行...
这个我没有太具体调查...^^
而且postgresql最近版本我也没有关注
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP