Executing in parallel
Parallelizable routines can execute in parallel across multiple processors.
To make a UDR parallelizable, apply the following rules:
- Follow the guidelines for well-behaved user-defined routines.
- Avoid any DataBlade API routine that involves query processing (mi_exec(), mi_exec_prepared_statement()), collections (mi_collection_*), row types, or save sets (mi_save_set_*).
- Do not create rows that contain any complex types including another row type as one of the columns. Do not use the mi_row_create() or mi_value() functions with complex types or row types.
- Avoid DataBlade API FastPath functions (mi_routine_*, mi_func_desc_by_typeid()) if the access method might pass them routine identifiers for nonparallelizable routines.
- Specify the PARALLELIZABLE routine modifier in the CREATE FUNCTION or CREATE PROCEDURE statement for the UDR.
For more information about the following topics, see the HCL
Informix®
DataBlade API Programmer's Guide:
- Guidelines for well-behaved user-defined routines
- A complete list of nonparallelizable functions
- FastPath function syntax, usage, and examples
For more information about the PARALLELIZABLE (and other) routine modifiers, see the routine modifier section in the HCL Informix Guide to SQL: Syntax. For more information about parallelizable UDRs, see Creating User-Defined Routines and User-Defined Types.
To make an access method parallelizable:
Important: A parallelizable
purpose function must call only routines that are also parallelizable.
The database server sets an am_parallel purpose value in the sysams system catalog table to indicate which access-method actions can occur in parallel. For more information, see the purpose options of the CREATE ACCESS METHOD and ALTER ACCESS METHOD SQL statements in HCL Informix Guide to SQL: Syntax.