SlideShare a Scribd company logo
Ulf Wendel, Oracle



    PHP mysqlnd
Connection Multiplexing

    PECL/mysqlnd_mux 1.0.0-prototype
The speaker says...
When fast is not fast enough, you pull all triggers. This
includes attempts to optimize an already reasonable fast
operation: connect time to MySQL.


The PHP mysqlnd connection multiplexing plugin,
shares a physical connection among multiple user
handles. Thus, connection overhead is saved on the client
side and the number of opened connection is reduced on the
server side.
PECL/mysqlnd_mux is an Oracle open source development
available from pecl.php.net. Developed by Andrey
Hristov.
Plugins are mostly transparent
 WordPress, Drupal, Symfony, Oxid, ZendFramework, ...


               mysql, mysqli, PDO_MYSQL

                       mysqlnd

              PECL/mysqlnd_mux plugin

               Connection Multiplexing



                     MySQL Server
The speaker says...
PECL/mysqlnd_mux is a plugin for the mysqlnd library. The
mysqlnd library is the default C client library used
by the PHP MySQL extensions mysql, mysqli and
PDO_MySQL internally. Mysqlnd ships with PHP since 5.3.


Plugins operate at a layer beneath the user APIs,
thus improvements are available to all PHP MySQL
APIs.


Other free plugins are PECL/mysqlnd_ms (replication and
load balancing), PECL/mysqlnd_qc (client-side query cache)
and many more.
PECL/mysqlnd_mux
●
    Multiplexing: share connection among handles
       Reduce client connect overhead, reduce server load
       Prototype, requires PHP 5.5.0+

        connect()        connect()         connect()


                    n connection handles

                    PECL/mysqlnd_mux

                        1 connection


                          MySQL
The speaker says...
The PHP mysqlnd connection multiplexing proxies MySQL
connections. Whenever a client attempts to open a
connection to a host, the plugin checks whether there is
already a cached network connection to the host in
question. If not, a new connection is established and
associated with the users' connection handle. Otherwise,
the users' connection handle is linked with an
already opened network connection.

This way, multiple user handles can point to the
same network connection and share it. Connection
overhead is saved and fewer connections are opened.
The price you pay
●
    Multiplexing means serializing tasks
        Possibility of wait situations
        Prototype: no upgrade to dedicated connection
        Prototype: no collision counter


    Query 1
                   MUX     Query 1   Query 2    MySQL
       Query 2


                                                  Time
The speaker says...
Sharing a resource often requires serializing access to it.
This is also the case with a shared connection of the PHP
mysqlnd connection multiplexing plugin. Serializing
actions bares the risks of collisions and wait
situations. In the example, a clients query has to wait for
completion of another clients query before it can be
executed. Query 2 waits for query 1 to finish.


The prototype is using a mutex to synchronize access to a
shared connection.
MUX as a demo of the plugin API
●
    No new API calls, it just works!

        Supports popular buffered queries
        (mysql_query(), mysqli_query(),
        PDO if using PDO::ATTR_EMULATE_PREPARES)

        Prototype does not handle unbuffered queries
        (mysqli_real_query())
        Prepared statements not in 1.0.0-prototype
        (mysqli_stmt_*())
The speaker says...
PECL/mysqlnd_mux 1.0.0-prototype is an example of the
strenghts of the mysqlnd C plugin API. The initial public
release is not a production-ready stable solution. Features
have been skipped for the prototype to keep the
demo of the plugin API short and comprehensive.


The astonishing finding of the plugin is that multiplexing
can be added to add PHP MySQL APIs without
changing the APIs. It just works – for some cases already
today. Other cases could be covered in future
versions, depending on user feedback.
THAT'S IT FOLKS?
Compared to pooling
●
    Connection remains open after close()
        Connection establishment overhead reduced
        Number of concurrent connections not reduced
        Usually, connection state reset upon reuse
                  Client                Client


                     Connection pool


            Connection     Connection     Connection


                            MySQL
The speaker says...
A connection pool is a cache for connections. If a
client openes a connection, the pool is checked for an
already estiablished connection to the requested host. In
case of a hit, the pooled connection is reset, then taken from
the pool of unused connections and returned to the client. If
no connection is found a new one gets opened and returned
to the caller. Then, the connection is used until the client
calls close(). Upon close(), the connection is not closed but
put back into the pool for reuse.


Pooling saves time on reuse but does not reduce the total
number of concurrent connections.
Persistent Connection
●
    Connection remains open after close()
         Connection overhead and reuse costs reduced
         Number of concurrent connections not reduced
         Connection state not reset before reuse

    Client 1               Pool    Connection 1     MySQL

               SET @myvar = 1

    Client 2               Pool    Connection 1     MySQL

               SELECT @myvar
The speaker says...
Persistent connections can be described as a special kind of
 pooled connections. As the name says, the state of a
persistent connection is not reset between use .
PHP persistent database connections have often been
criticised for persisting the state of a connection... - for their
very purpose!


Thus, when „persistent connections“ have been added to the
mysqli extension, mysqli actually got pooled
connections. By default, the connection state is
reset before reuse. Performance fanatics can disable this
during compile time.
Speed-up tricks compared
●
    Every optimization is a trade
         You gain something: fewer connections opened
         You give something: collision possible
         You gain something: lower connection costs
         You give something: no isolation of connection state
                                              MUX   Pooled   Pers. Conn
                                                     Conn.
Reduce connection overhead                    Yes     Yes            Yes
Reduce # concurrently open connections        Yes      No             No
Connection state shared among clients         Yes      No            Yes
                                                             (mysqli: No)
Serialization required, collisions possible   Yes      No             No
The speaker says...
Optimizations, such as multiplexing, pooling or persistent
connections come at a price. There is no one-fits all trick.


Please, try to understand the properties of each
option. Then, decide on a case-by-case basis
which technology to use.
Remember: scope/life-span
●
    Pools are bound to a PHP process
       Depending on deployment model,
       a PHP process handles one or multiple requests


                     HTTP Server

          PHP process          PHP process

         Connection pool     Connection pool

         Conn 1   Conn 2    Conn 3    Conn 4
The speaker says...
Operating systems associate file descriptors, including
network connections, with processes. At the end of the
process, the network connections are closed. Thus, the
life-span of every client-side cache/pool of a PHP
process is that of the PHP process. No matter
whether we are discussing connections cached for
multiplexing or persistent connections as found in
any of the PHP MySQL APIs (mysql, mysqli,
PDO_MySQL).


Depending on the web server deployment model, a PHP
process handles one or multiple requests (script runs).
THE END



      http://www.slideshare.net/nixnutz/
Contact: ulf.wendel@oracle.com, @Ulf_Wendel

More Related Content

What's hot

MySQL 5.7 Fabric: Introduction to High Availability and Sharding
MySQL 5.7 Fabric: Introduction to High Availability and Sharding MySQL 5.7 Fabric: Introduction to High Availability and Sharding
MySQL 5.7 Fabric: Introduction to High Availability and Sharding
Ulf Wendel
 
Vote NO for MySQL
Vote NO for MySQLVote NO for MySQL
Vote NO for MySQL
Ulf Wendel
 
MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4
MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4
MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4
Ulf Wendel
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIs
Ulf Wendel
 
HTTP Plugin for MySQL!
HTTP Plugin for MySQL!HTTP Plugin for MySQL!
HTTP Plugin for MySQL!
Ulf Wendel
 
MySQL 5.7 clustering: The developer perspective
MySQL 5.7 clustering: The developer perspectiveMySQL 5.7 clustering: The developer perspective
MySQL 5.7 clustering: The developer perspective
Ulf Wendel
 
PoC: Using a Group Communication System to improve MySQL Replication HA
PoC: Using a Group Communication System to improve MySQL Replication HAPoC: Using a Group Communication System to improve MySQL Replication HA
PoC: Using a Group Communication System to improve MySQL Replication HA
Ulf Wendel
 
DIY: A distributed database cluster, or: MySQL Cluster
DIY: A distributed database cluster, or: MySQL ClusterDIY: A distributed database cluster, or: MySQL Cluster
DIY: A distributed database cluster, or: MySQL Cluster
Ulf Wendel
 
MySQL Group Replication
MySQL Group ReplicationMySQL Group Replication
MySQL Group Replication
Ulf Wendel
 
Award-winning technology: Oxid loves the query cache
Award-winning technology: Oxid loves the query cacheAward-winning technology: Oxid loves the query cache
Award-winning technology: Oxid loves the query cache
Ulf Wendel
 
Highly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlndHighly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlnd
Jervin Real
 
MySQL Group Replication
MySQL Group ReplicationMySQL Group Replication
MySQL Group Replication
Bogdan Kecman
 
Active mq Installation and Master Slave setup
Active mq Installation and Master Slave setupActive mq Installation and Master Slave setup
Active mq Installation and Master Slave setup
Ramakrishna Narkedamilli
 
Introduction to Galera
Introduction to GaleraIntroduction to Galera
Introduction to Galera
Henrik Ingo
 
MySQL Multi Master Replication
MySQL Multi Master ReplicationMySQL Multi Master Replication
MySQL Multi Master Replication
Moshe Kaplan
 
Mysql high availability and scalability
Mysql high availability and scalabilityMysql high availability and scalability
Mysql high availability and scalability
yin gong
 
MySQL X protocol - Talking to MySQL Directly over the Wire
MySQL X protocol - Talking to MySQL Directly over the WireMySQL X protocol - Talking to MySQL Directly over the Wire
MySQL X protocol - Talking to MySQL Directly over the Wire
Simon J Mudd
 
Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2
Marco Tusa
 
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & ClusterMySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
Kenny Gryp
 
Introduction to Galera Cluster
Introduction to Galera ClusterIntroduction to Galera Cluster
Introduction to Galera Cluster
Codership Oy - Creators of Galera Cluster
 

What's hot (20)

MySQL 5.7 Fabric: Introduction to High Availability and Sharding
MySQL 5.7 Fabric: Introduction to High Availability and Sharding MySQL 5.7 Fabric: Introduction to High Availability and Sharding
MySQL 5.7 Fabric: Introduction to High Availability and Sharding
 
Vote NO for MySQL
Vote NO for MySQLVote NO for MySQL
Vote NO for MySQL
 
MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4
MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4
MySQL? Load? Clustering! Balancing! PECL/mysqlnd_ms 1.4
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIs
 
HTTP Plugin for MySQL!
HTTP Plugin for MySQL!HTTP Plugin for MySQL!
HTTP Plugin for MySQL!
 
MySQL 5.7 clustering: The developer perspective
MySQL 5.7 clustering: The developer perspectiveMySQL 5.7 clustering: The developer perspective
MySQL 5.7 clustering: The developer perspective
 
PoC: Using a Group Communication System to improve MySQL Replication HA
PoC: Using a Group Communication System to improve MySQL Replication HAPoC: Using a Group Communication System to improve MySQL Replication HA
PoC: Using a Group Communication System to improve MySQL Replication HA
 
DIY: A distributed database cluster, or: MySQL Cluster
DIY: A distributed database cluster, or: MySQL ClusterDIY: A distributed database cluster, or: MySQL Cluster
DIY: A distributed database cluster, or: MySQL Cluster
 
MySQL Group Replication
MySQL Group ReplicationMySQL Group Replication
MySQL Group Replication
 
Award-winning technology: Oxid loves the query cache
Award-winning technology: Oxid loves the query cacheAward-winning technology: Oxid loves the query cache
Award-winning technology: Oxid loves the query cache
 
Highly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlndHighly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlnd
 
MySQL Group Replication
MySQL Group ReplicationMySQL Group Replication
MySQL Group Replication
 
Active mq Installation and Master Slave setup
Active mq Installation and Master Slave setupActive mq Installation and Master Slave setup
Active mq Installation and Master Slave setup
 
Introduction to Galera
Introduction to GaleraIntroduction to Galera
Introduction to Galera
 
MySQL Multi Master Replication
MySQL Multi Master ReplicationMySQL Multi Master Replication
MySQL Multi Master Replication
 
Mysql high availability and scalability
Mysql high availability and scalabilityMysql high availability and scalability
Mysql high availability and scalability
 
MySQL X protocol - Talking to MySQL Directly over the Wire
MySQL X protocol - Talking to MySQL Directly over the WireMySQL X protocol - Talking to MySQL Directly over the Wire
MySQL X protocol - Talking to MySQL Directly over the Wire
 
Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2
 
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & ClusterMySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
 
Introduction to Galera Cluster
Introduction to Galera ClusterIntroduction to Galera Cluster
Introduction to Galera Cluster
 

Viewers also liked

The power of mysqlnd plugins
The power of mysqlnd pluginsThe power of mysqlnd plugins
The power of mysqlnd plugins
Ulf Wendel
 
Lecture#04, use case diagram
Lecture#04, use case diagramLecture#04, use case diagram
Lecture#04, use case diagram
babak danyal
 
Lecture #5 Data Communication and Network
Lecture #5 Data Communication and NetworkLecture #5 Data Communication and Network
Lecture #5 Data Communication and Network
vasanthimuniasamy
 
HTTP, JSON, JavaScript, Map&Reduce built-in to MySQL
HTTP, JSON, JavaScript, Map&Reduce built-in to MySQLHTTP, JSON, JavaScript, Map&Reduce built-in to MySQL
HTTP, JSON, JavaScript, Map&Reduce built-in to MySQL
Ulf Wendel
 
Use case-diagrams
Use case-diagramsUse case-diagrams
Use case-diagrams
Maoelana Noermoehammad
 
Advance Web Designing - Lecture 02 / 30
Advance Web Designing - Lecture 02 / 30Advance Web Designing - Lecture 02 / 30
Advance Web Designing - Lecture 02 / 30
alishanvr
 
Hospital as an organisation
Hospital as an organisationHospital as an organisation
Hospital as an organisation
Nc Das
 
Censo mpps analisis
Censo mpps analisisCenso mpps analisis
Censo mpps analisis
BLANCA JOSEFINA ROBERTIS CHAVEZ
 
Advance Web Designing - Lecture 1 / 30
Advance Web Designing - Lecture 1 / 30Advance Web Designing - Lecture 1 / 30
Advance Web Designing - Lecture 1 / 30
alishanvr
 
Node.js and The Internet of Things
Node.js and The Internet of ThingsNode.js and The Internet of Things
Node.js and The Internet of Things
Losant
 
Data communication and network Chapter -1
Data communication and network Chapter -1Data communication and network Chapter -1
Data communication and network Chapter -1
Zafar Ayub
 
Object-Oriented Analysis & Design (OOAD) Domain Modeling Introduction
  Object-Oriented Analysis & Design (OOAD)  Domain Modeling Introduction  Object-Oriented Analysis & Design (OOAD)  Domain Modeling Introduction
Object-Oriented Analysis & Design (OOAD) Domain Modeling Introduction
Dang Tuan
 

Viewers also liked (12)

The power of mysqlnd plugins
The power of mysqlnd pluginsThe power of mysqlnd plugins
The power of mysqlnd plugins
 
Lecture#04, use case diagram
Lecture#04, use case diagramLecture#04, use case diagram
Lecture#04, use case diagram
 
Lecture #5 Data Communication and Network
Lecture #5 Data Communication and NetworkLecture #5 Data Communication and Network
Lecture #5 Data Communication and Network
 
HTTP, JSON, JavaScript, Map&Reduce built-in to MySQL
HTTP, JSON, JavaScript, Map&Reduce built-in to MySQLHTTP, JSON, JavaScript, Map&Reduce built-in to MySQL
HTTP, JSON, JavaScript, Map&Reduce built-in to MySQL
 
Use case-diagrams
Use case-diagramsUse case-diagrams
Use case-diagrams
 
Advance Web Designing - Lecture 02 / 30
Advance Web Designing - Lecture 02 / 30Advance Web Designing - Lecture 02 / 30
Advance Web Designing - Lecture 02 / 30
 
Hospital as an organisation
Hospital as an organisationHospital as an organisation
Hospital as an organisation
 
Censo mpps analisis
Censo mpps analisisCenso mpps analisis
Censo mpps analisis
 
Advance Web Designing - Lecture 1 / 30
Advance Web Designing - Lecture 1 / 30Advance Web Designing - Lecture 1 / 30
Advance Web Designing - Lecture 1 / 30
 
Node.js and The Internet of Things
Node.js and The Internet of ThingsNode.js and The Internet of Things
Node.js and The Internet of Things
 
Data communication and network Chapter -1
Data communication and network Chapter -1Data communication and network Chapter -1
Data communication and network Chapter -1
 
Object-Oriented Analysis & Design (OOAD) Domain Modeling Introduction
  Object-Oriented Analysis & Design (OOAD)  Domain Modeling Introduction  Object-Oriented Analysis & Design (OOAD)  Domain Modeling Introduction
Object-Oriented Analysis & Design (OOAD) Domain Modeling Introduction
 

Similar to PHP mysqlnd connection multiplexing plugin

Mysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extensionMysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extension
julien pauli
 
Talon systems - Distributed multi master replication strategy
Talon systems - Distributed multi master replication strategyTalon systems - Distributed multi master replication strategy
Talon systems - Distributed multi master replication strategy
Saptarshi Chatterjee
 
Midwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL FeaturesMidwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL Features
Dave Stokes
 
Reactive Applications with Apache Pulsar and Spring Boot
Reactive Applications with Apache Pulsar and Spring BootReactive Applications with Apache Pulsar and Spring Boot
Reactive Applications with Apache Pulsar and Spring Boot
VMware Tanzu
 
Performance evaluation of larger matrices over cluster of four nodes using mpi
Performance evaluation of larger matrices over cluster of four nodes using mpiPerformance evaluation of larger matrices over cluster of four nodes using mpi
Performance evaluation of larger matrices over cluster of four nodes using mpi
eSAT Journals
 
A Domain-Specific Embedded Language for Programming Parallel Architectures.
A Domain-Specific Embedded Language for Programming Parallel Architectures.A Domain-Specific Embedded Language for Programming Parallel Architectures.
A Domain-Specific Embedded Language for Programming Parallel Architectures.
Jason Hearne-McGuiness
 
ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016
Derek Downey
 
Concurrency and parallel in .net
Concurrency and parallel in .netConcurrency and parallel in .net
Concurrency and parallel in .net
Mohammad Hossein Karami
 
Pydbapi
PydbapiPydbapi
Pydbapi
AkramWaseem
 
Clustering Multiple Instances in Cold Fusion
Clustering Multiple Instances in Cold FusionClustering Multiple Instances in Cold Fusion
Clustering Multiple Instances in Cold Fusion
Mindfire Solutions
 
MOOC backbone using Netty and Protobuf
MOOC backbone using Netty and ProtobufMOOC backbone using Netty and Protobuf
MOOC backbone using Netty and Protobuf
Gaurav Bhardwaj
 
MySQL PHP native driver : Advanced Functions / PHP forum Paris 2013
 MySQL PHP native driver  : Advanced Functions / PHP forum Paris 2013   MySQL PHP native driver  : Advanced Functions / PHP forum Paris 2013
MySQL PHP native driver : Advanced Functions / PHP forum Paris 2013
Serge Frezefond
 
thread_ multiprocessor_ scheduling_a.ppt
thread_ multiprocessor_ scheduling_a.pptthread_ multiprocessor_ scheduling_a.ppt
thread_ multiprocessor_ scheduling_a.ppt
naghamallella
 
Develop PHP Applications with MySQL X DevAPI
Develop PHP Applications with MySQL X DevAPIDevelop PHP Applications with MySQL X DevAPI
Develop PHP Applications with MySQL X DevAPI
Dave Stokes
 
Express node js
Express node jsExpress node js
Express node js
Yashprit Singh
 
Topic 4- processes.pptx
Topic 4- processes.pptxTopic 4- processes.pptx
Topic 4- processes.pptx
DanishMahmood23
 
Software architecture for data applications
Software architecture for data applicationsSoftware architecture for data applications
Software architecture for data applications
Ding Li
 
Client Centric Consistency Model
Client Centric Consistency ModelClient Centric Consistency Model
Client Centric Consistency Model
Rajat Kumar
 
PHP Basics
PHP BasicsPHP Basics
PHP Basics
Roohul Amin
 
Reactive programming intro
Reactive programming introReactive programming intro
Reactive programming intro
Ahmed Ehab AbdulAziz
 

Similar to PHP mysqlnd connection multiplexing plugin (20)

Mysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extensionMysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extension
 
Talon systems - Distributed multi master replication strategy
Talon systems - Distributed multi master replication strategyTalon systems - Distributed multi master replication strategy
Talon systems - Distributed multi master replication strategy
 
Midwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL FeaturesMidwest PHP Presentation - New MSQL Features
Midwest PHP Presentation - New MSQL Features
 
Reactive Applications with Apache Pulsar and Spring Boot
Reactive Applications with Apache Pulsar and Spring BootReactive Applications with Apache Pulsar and Spring Boot
Reactive Applications with Apache Pulsar and Spring Boot
 
Performance evaluation of larger matrices over cluster of four nodes using mpi
Performance evaluation of larger matrices over cluster of four nodes using mpiPerformance evaluation of larger matrices over cluster of four nodes using mpi
Performance evaluation of larger matrices over cluster of four nodes using mpi
 
A Domain-Specific Embedded Language for Programming Parallel Architectures.
A Domain-Specific Embedded Language for Programming Parallel Architectures.A Domain-Specific Embedded Language for Programming Parallel Architectures.
A Domain-Specific Embedded Language for Programming Parallel Architectures.
 
ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016ProxySQL Tutorial - PLAM 2016
ProxySQL Tutorial - PLAM 2016
 
Concurrency and parallel in .net
Concurrency and parallel in .netConcurrency and parallel in .net
Concurrency and parallel in .net
 
Pydbapi
PydbapiPydbapi
Pydbapi
 
Clustering Multiple Instances in Cold Fusion
Clustering Multiple Instances in Cold FusionClustering Multiple Instances in Cold Fusion
Clustering Multiple Instances in Cold Fusion
 
MOOC backbone using Netty and Protobuf
MOOC backbone using Netty and ProtobufMOOC backbone using Netty and Protobuf
MOOC backbone using Netty and Protobuf
 
MySQL PHP native driver : Advanced Functions / PHP forum Paris 2013
 MySQL PHP native driver  : Advanced Functions / PHP forum Paris 2013   MySQL PHP native driver  : Advanced Functions / PHP forum Paris 2013
MySQL PHP native driver : Advanced Functions / PHP forum Paris 2013
 
thread_ multiprocessor_ scheduling_a.ppt
thread_ multiprocessor_ scheduling_a.pptthread_ multiprocessor_ scheduling_a.ppt
thread_ multiprocessor_ scheduling_a.ppt
 
Develop PHP Applications with MySQL X DevAPI
Develop PHP Applications with MySQL X DevAPIDevelop PHP Applications with MySQL X DevAPI
Develop PHP Applications with MySQL X DevAPI
 
Express node js
Express node jsExpress node js
Express node js
 
Topic 4- processes.pptx
Topic 4- processes.pptxTopic 4- processes.pptx
Topic 4- processes.pptx
 
Software architecture for data applications
Software architecture for data applicationsSoftware architecture for data applications
Software architecture for data applications
 
Client Centric Consistency Model
Client Centric Consistency ModelClient Centric Consistency Model
Client Centric Consistency Model
 
PHP Basics
PHP BasicsPHP Basics
PHP Basics
 
Reactive programming intro
Reactive programming introReactive programming intro
Reactive programming intro
 

Recently uploaded

Keynote : Presentation on SASE Technology
Keynote : Presentation on SASE TechnologyKeynote : Presentation on SASE Technology
Keynote : Presentation on SASE Technology
Priyanka Aash
 
How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...
DianaGray10
 
Keynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive SecurityKeynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive Security
Priyanka Aash
 
Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
Brian Pichman
 
Acumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptxAcumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptx
BrainSell Technologies
 
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
FIDO Alliance
 
Required Documents for ISO 17021 Certification.PPT
Required Documents for ISO 17021 Certification.PPTRequired Documents for ISO 17021 Certification.PPT
Required Documents for ISO 17021 Certification.PPT
mithun772
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
Bhajan Mehta
 
COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...
COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...
COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...
AimanAthambawa1
 
Discovery Series - Zero to Hero - Task Mining Session 1
Discovery Series - Zero to Hero - Task Mining Session 1Discovery Series - Zero to Hero - Task Mining Session 1
Discovery Series - Zero to Hero - Task Mining Session 1
DianaGray10
 
Smart Mobility Market:Revolutionizing Transportation.pdf
Smart Mobility Market:Revolutionizing Transportation.pdfSmart Mobility Market:Revolutionizing Transportation.pdf
Smart Mobility Market:Revolutionizing Transportation.pdf
Market.us
 
The Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - CoatueThe Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - Coatue
Razin Mustafiz
 
It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...
Zilliz
 
Redefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI CapabilitiesRedefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI Capabilities
Priyanka Aash
 
Camunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptxCamunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptx
ZachWylie3
 
Semantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software DevelopmentSemantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software Development
Baishakhi Ray
 
Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024
Michael Price
 
Improving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning ContentImproving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning Content
Enterprise Knowledge
 
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Zilliz
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
DianaGray10
 

Recently uploaded (20)

Keynote : Presentation on SASE Technology
Keynote : Presentation on SASE TechnologyKeynote : Presentation on SASE Technology
Keynote : Presentation on SASE Technology
 
How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...How UiPath Discovery Suite supports identification of Agentic Process Automat...
How UiPath Discovery Suite supports identification of Agentic Process Automat...
 
Keynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive SecurityKeynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive Security
 
Uncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in LibrariesUncharted Together- Navigating AI's New Frontiers in Libraries
Uncharted Together- Navigating AI's New Frontiers in Libraries
 
Acumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptxAcumatica vs. Sage Intacct _Construction_July (1).pptx
Acumatica vs. Sage Intacct _Construction_July (1).pptx
 
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
UX Webinar Series: Drive Revenue and Decrease Costs with Passkeys for Consume...
 
Required Documents for ISO 17021 Certification.PPT
Required Documents for ISO 17021 Certification.PPTRequired Documents for ISO 17021 Certification.PPT
Required Documents for ISO 17021 Certification.PPT
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
 
COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...
COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...
COVID-19 and the Level of Cloud Computing Adoption: A Study of Sri Lankan Inf...
 
Discovery Series - Zero to Hero - Task Mining Session 1
Discovery Series - Zero to Hero - Task Mining Session 1Discovery Series - Zero to Hero - Task Mining Session 1
Discovery Series - Zero to Hero - Task Mining Session 1
 
Smart Mobility Market:Revolutionizing Transportation.pdf
Smart Mobility Market:Revolutionizing Transportation.pdfSmart Mobility Market:Revolutionizing Transportation.pdf
Smart Mobility Market:Revolutionizing Transportation.pdf
 
The Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - CoatueThe Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - Coatue
 
It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...
 
Redefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI CapabilitiesRedefining Cybersecurity with AI Capabilities
Redefining Cybersecurity with AI Capabilities
 
Camunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptxCamunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptx
 
Semantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software DevelopmentSemantic-Aware Code Model: Elevating the Future of Software Development
Semantic-Aware Code Model: Elevating the Future of Software Development
 
Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024Perth MuleSoft Meetup July 2024
Perth MuleSoft Meetup July 2024
 
Improving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning ContentImproving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning Content
 
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
Garbage In, Garbage Out: Why poor data curation is killing your AI models (an...
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
 

PHP mysqlnd connection multiplexing plugin

  • 1. Ulf Wendel, Oracle PHP mysqlnd Connection Multiplexing PECL/mysqlnd_mux 1.0.0-prototype
  • 2. The speaker says... When fast is not fast enough, you pull all triggers. This includes attempts to optimize an already reasonable fast operation: connect time to MySQL. The PHP mysqlnd connection multiplexing plugin, shares a physical connection among multiple user handles. Thus, connection overhead is saved on the client side and the number of opened connection is reduced on the server side. PECL/mysqlnd_mux is an Oracle open source development available from pecl.php.net. Developed by Andrey Hristov.
  • 3. Plugins are mostly transparent WordPress, Drupal, Symfony, Oxid, ZendFramework, ... mysql, mysqli, PDO_MYSQL mysqlnd PECL/mysqlnd_mux plugin Connection Multiplexing MySQL Server
  • 4. The speaker says... PECL/mysqlnd_mux is a plugin for the mysqlnd library. The mysqlnd library is the default C client library used by the PHP MySQL extensions mysql, mysqli and PDO_MySQL internally. Mysqlnd ships with PHP since 5.3. Plugins operate at a layer beneath the user APIs, thus improvements are available to all PHP MySQL APIs. Other free plugins are PECL/mysqlnd_ms (replication and load balancing), PECL/mysqlnd_qc (client-side query cache) and many more.
  • 5. PECL/mysqlnd_mux ● Multiplexing: share connection among handles Reduce client connect overhead, reduce server load Prototype, requires PHP 5.5.0+ connect() connect() connect() n connection handles PECL/mysqlnd_mux 1 connection MySQL
  • 6. The speaker says... The PHP mysqlnd connection multiplexing proxies MySQL connections. Whenever a client attempts to open a connection to a host, the plugin checks whether there is already a cached network connection to the host in question. If not, a new connection is established and associated with the users' connection handle. Otherwise, the users' connection handle is linked with an already opened network connection. This way, multiple user handles can point to the same network connection and share it. Connection overhead is saved and fewer connections are opened.
  • 7. The price you pay ● Multiplexing means serializing tasks Possibility of wait situations Prototype: no upgrade to dedicated connection Prototype: no collision counter Query 1 MUX Query 1 Query 2 MySQL Query 2 Time
  • 8. The speaker says... Sharing a resource often requires serializing access to it. This is also the case with a shared connection of the PHP mysqlnd connection multiplexing plugin. Serializing actions bares the risks of collisions and wait situations. In the example, a clients query has to wait for completion of another clients query before it can be executed. Query 2 waits for query 1 to finish. The prototype is using a mutex to synchronize access to a shared connection.
  • 9. MUX as a demo of the plugin API ● No new API calls, it just works! Supports popular buffered queries (mysql_query(), mysqli_query(), PDO if using PDO::ATTR_EMULATE_PREPARES) Prototype does not handle unbuffered queries (mysqli_real_query()) Prepared statements not in 1.0.0-prototype (mysqli_stmt_*())
  • 10. The speaker says... PECL/mysqlnd_mux 1.0.0-prototype is an example of the strenghts of the mysqlnd C plugin API. The initial public release is not a production-ready stable solution. Features have been skipped for the prototype to keep the demo of the plugin API short and comprehensive. The astonishing finding of the plugin is that multiplexing can be added to add PHP MySQL APIs without changing the APIs. It just works – for some cases already today. Other cases could be covered in future versions, depending on user feedback.
  • 12. Compared to pooling ● Connection remains open after close() Connection establishment overhead reduced Number of concurrent connections not reduced Usually, connection state reset upon reuse Client Client Connection pool Connection Connection Connection MySQL
  • 13. The speaker says... A connection pool is a cache for connections. If a client openes a connection, the pool is checked for an already estiablished connection to the requested host. In case of a hit, the pooled connection is reset, then taken from the pool of unused connections and returned to the client. If no connection is found a new one gets opened and returned to the caller. Then, the connection is used until the client calls close(). Upon close(), the connection is not closed but put back into the pool for reuse. Pooling saves time on reuse but does not reduce the total number of concurrent connections.
  • 14. Persistent Connection ● Connection remains open after close() Connection overhead and reuse costs reduced Number of concurrent connections not reduced Connection state not reset before reuse Client 1 Pool Connection 1 MySQL SET @myvar = 1 Client 2 Pool Connection 1 MySQL SELECT @myvar
  • 15. The speaker says... Persistent connections can be described as a special kind of pooled connections. As the name says, the state of a persistent connection is not reset between use . PHP persistent database connections have often been criticised for persisting the state of a connection... - for their very purpose! Thus, when „persistent connections“ have been added to the mysqli extension, mysqli actually got pooled connections. By default, the connection state is reset before reuse. Performance fanatics can disable this during compile time.
  • 16. Speed-up tricks compared ● Every optimization is a trade You gain something: fewer connections opened You give something: collision possible You gain something: lower connection costs You give something: no isolation of connection state MUX Pooled Pers. Conn Conn. Reduce connection overhead Yes Yes Yes Reduce # concurrently open connections Yes No No Connection state shared among clients Yes No Yes (mysqli: No) Serialization required, collisions possible Yes No No
  • 17. The speaker says... Optimizations, such as multiplexing, pooling or persistent connections come at a price. There is no one-fits all trick. Please, try to understand the properties of each option. Then, decide on a case-by-case basis which technology to use.
  • 18. Remember: scope/life-span ● Pools are bound to a PHP process Depending on deployment model, a PHP process handles one or multiple requests HTTP Server PHP process PHP process Connection pool Connection pool Conn 1 Conn 2 Conn 3 Conn 4
  • 19. The speaker says... Operating systems associate file descriptors, including network connections, with processes. At the end of the process, the network connections are closed. Thus, the life-span of every client-side cache/pool of a PHP process is that of the PHP process. No matter whether we are discussing connections cached for multiplexing or persistent connections as found in any of the PHP MySQL APIs (mysql, mysqli, PDO_MySQL). Depending on the web server deployment model, a PHP process handles one or multiple requests (script runs).
  • 20. THE END http://www.slideshare.net/nixnutz/ Contact: ulf.wendel@oracle.com, @Ulf_Wendel