A CREATE statement in a file placement policy rule specifies one or more placement classes of volumes on which VxFS should allocate space for new files to which the rule applies at the time the files are created. You can specify only placement classes, not individual volume names, in a CREATE statement.
A file placement policy rule may contain at most one CREATE statement. If a rule does not contain a CREATE statement, VxFS places files designated by the rule's SELECT statements according to its internal algorithms. However, rules without CREATE statements can be used to relocate or delete existing files that the rules' SELECT statements designate.
<CREATE> <ON Flags="flag_value"> <DESTINATION> <CLASS> placement_class_name </CLASS> <BALANCE_SIZE Units="units_specifier"> chunk_size </BALANCE_SIZE> </DESTINATION> <DESTINATION> additional_placement_class_specifications </DESTINATION> </ON> </CREATE>
A CREATE statement includes a single <ON> clause, in which one or more <DESTINATION> XML elements specify placement classes for initial file allocation in order of decreasing preference. VxFS allocates space for new files to which a rule applies on a volume in the first class specified, if available space permits. If space cannot be allocated on any volume in the first class, VxFS allocates space on a volume in the second class specified if available space permits, and so forth.
If space cannot be allocated on any volume in any of the placement classes specified, file creation fails with an ENOSPC error, even if adequate space is available elsewhere in the file system's volume set. This situation can be circumvented by specifying a Flags attribute with a value of "any" in the <ON> clause. If <ON Flags="any"> is specified in a CREATE statement, VxFS first attempts to allocate space for new files to which the rule applies on the specified placement classes. Failing that, VxFS resorts to its internal space allocation algorithms, so file allocation does not fail unless there is no available space any-where in the file system's volume set.
The Flags="any" attribute differs from the catchall rule in that this attribute applies only to files designated by the SELECT statement in the rule, which may be less inclusive than the <PATTERN>*</PATTERN> file selection specification of the catchall rule.
In addition to the placement class name specified in the <CLASS> sub-element, a <DESTINATION> XML element may contain a <BALANCE_SIZE> sub-element. Presence of a <BALANCE_SIZE> element indicates that space allocation should be distributed across the volumes of the placement class in chunks of the indicated size. For example, if a balance size of one megabyte is specified for a placement class containing three volumes, VxFS allocates the first megabyte of space for a new or extending file on the first (lowest indexed) volume in the class, the second megabyte on the second volume, the third megabyte on the third volume, the fourth megabyte on the first volume, and so forth. Using the Units attribute in the <BALANCE_SIZE> XML tag, the balance size value may be specified in the following units:
The <BALANCE_SIZE> element distributes the allocation of database files across the volumes in a placement class. In principle, distributing the data in each file across multiple volumes distributes the I/O load across the volumes as well.
The CREATE statement in the following example specifies that files to which the rule applies should be created on the
tier1 volume if space is available, and on one of the
tier2 volumes if not. If space allocation on
tier2 volumes is not possible, file creation fails, even if space is available on
<CREATE> <ON> <DESTINATION> <CLASS>tier1</CLASS> </DESTINATION> <DESTINATION> <CLASS>tier2</CLASS> <BALANCE_SIZE Units="MB">1</BALANCE_SIZE> </DESTINATION> </ON> </CREATE>
The <BALANCE_SIZE> element with a value of one megabyte is specified for allocations on
tier2 volumes. For files allocated on
tier2 volumes, the first megabyte would be allocated on the first volume, the second on the second volume, and so forth.