Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tpkK9-00BOJx-2J for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 08:41:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tpkK5-004pxx-QZ for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 08:41:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tpkK5-004pw2-D2 for pgsql-hackers@lists.postgresql.org; Wed, 05 Mar 2025 08:41:49 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tpkK1-0013vR-30 for pgsql-hackers@lists.postgresql.org; Wed, 05 Mar 2025 08:41:49 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-390e702d481so3012195f8f.1 for ; Wed, 05 Mar 2025 00:41:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741164106; x=1741768906; darn=lists.postgresql.org; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=ob2GPKn0T5SSzhAXwwFHrIP7PJHo32GmC9mnmVPGPK4=; b=DTnh71WXQElw8MzuHvBLr5CTmRmZRa8YgNrJ6COiDW6E32JZZ76UcFkisOAHtCVx90 y1iHxIPsRcRleXgrwUdXiIse61rRdHbIH2gYIfMMwGwwYp8AUO+utchpgmLt+cw/XjZ2 QSCfzPRMI3jbIp8O3iT/lkSNUBE0/CZg8U+vP5BvdDGXZNRkjnUt4M9RpLAqgRwy7nlY k5waUiksk83u3KwGRzRC+W8ZuPa4u7OpS+BDJMYbbooLErJZv9YnlbeNSBEiGSK/MliI PYPXj7KIVuMHIA8OuEd6TKyOFcIcw8+ZSaQPfz7m/DraQwtrPc7tr2xWhHoQys8G9e1P FeMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741164106; x=1741768906; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ob2GPKn0T5SSzhAXwwFHrIP7PJHo32GmC9mnmVPGPK4=; b=uPns/ZomzV48qApsrIR9gCpfRXrhUy2LmlMTzAbP/jGsvGGZiciUzej8wLHz8L/fpz 2l8XhuQ9xMn4Tr0IWLjaU5ySLL6I1Y5T/TF6B8EW1qZ/eSFJh6AFaOxs8/Un+RAm32Tj dFd1J/jgflkvYgM2u/DzURMgKH07TUdm0p+Rcfvf1u44+NRjL4rxSOkyscF4OH9aIQGR LLwL1C55A+Hp6lhoHZxiAUT56AskWX9xH2y2ZptBQutjSPIBNW31pJzKa+gX5UJhNEcL yaO0pTz/re+Ee7RnVptxzbTPNurtkKxlabag1pKWXEKN6lSUTW9bQQ0ORfXtv0ARBzcN JoXg== X-Gm-Message-State: AOJu0YyQeZ/+eITtd5R4tJC3NgwjcGM0lrisNwo/CQ6kKvA4I6FTVLSL w/5mfhlxeNhfxsCHroex1KJ78hcHZqYpXiBCk2U6ndZ7/dKuS0fuppSQM7uZ2tQ= X-Gm-Gg: ASbGncv4zoBen1gZl6UTfmGTAxI0moFwKTQTQAVYTEYr66RdBPedwffJBgAomagegaU I9l2Z7ec48spD/Y9zkV0uu1VfvXt9s5jYwXPQhUCPwLjZ8cmZ2Ci0tG2H9NhH2b77thd/rwFd12 4RcYYyZdcEUTPnVwMFX1FZqAaHBfHsQQ+mf/DBXvmMb6SUT7BXwAw67NqqoFRMDv6w7V3ggFjel nOxCqM/AsrpBxjh1R9aFlJshQLiIFU14LUz1+IINEzjDCAuqkNOwOcu90lDTOmyYxtyzNgHwoL1 +lZbWxrQrvGQk6ob9FoV9TI/jqBwzA82ZB4nxgs8VSraC1qxZwog3w== X-Google-Smtp-Source: AGHT+IG5DCW+CLe+TLP1w2JBvH1zOhL9Z+UNcHDtVa45+Fnx8FezrkDFkvUf6KSqj9f7jr4YX6Nclg== X-Received: by 2002:a05:6000:1544:b0:390:e655:f998 with SMTP id ffacd0b85a97d-3911f756971mr1358633f8f.26.1741164104176; Wed, 05 Mar 2025 00:41:44 -0800 (PST) Received: from [172.20.10.2] ([31.4.241.133]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-391188029e0sm4525314f8f.52.2025.03.05.00.41.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 05 Mar 2025 00:41:43 -0800 (PST) Content-Type: multipart/mixed; boundary="------------M82cO2MBpb30WAGLRuugYhAx" Message-ID: Date: Wed, 5 Mar 2025 09:41:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers , Andy Fan , Tomas Vondra From: Andrei Lepikhov Subject: Hook for Selectivity Estimation in Query Planning List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------M82cO2MBpb30WAGLRuugYhAx Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I would like to discuss the introduction of a hook for evaluating the selectivity of an expression when searching for an optimal query plan. This topic has been brought up in various discussions, for example, in [1]. Currently, extensions that interact with the optimiser can only add their paths without the ability to influence the optimiser's decisions. As a result, when developing an extension that implements a new type of statistics (such as a histogram for composite types), utilises knowledge from previously executed queries, or implements some system of selectivity hints, we find ourselves writing a considerable amount of code. To ensure the reliable operation of the extension, this may end up in developing a separate optimiser or, at the very least, creating a custom join search (refer to core.c in the pg_hint_plan extension for an estimation of the amount of code required). A hook for evaluating selectivity could streamline the development of methods to improve selectivity evaluation, making it easier to create new types of statistics and estimation methods (I would like to deal with join clauses estimation). Considering the limited amount of code involved and the upcoming code freeze, I propose adding such a hook to PostgreSQL 18 to assess how it simplifies extension development. This proposed hook would complement the existing path hooks without overlapping in functionality. In my experience with implementing adaptive features in enterprise solutions, I believe that additional hooks could also be beneficial for estimating the number of groups and the amount of memory allocated, which is currently based solely on work_mem. However, these suggestions do not interfere with the current proposal and could be considered later. Critique: In general, a hook for evaluating the number of rows appears to be a more promising approach. It would allow the extension to access specific RelOptInfo data, thus providing insights into where the evaluation takes place within the plan. Consequently, this would enable a deeper influence on the query plan choice. However, implementing such a hook might be more invasive, requiring modifications to each cost function. Additionally, it addresses a slightly different issue and can be considered separately. Attached is a patch containing the proposed hook code. -- regards, Andrei Lepikhov --------------M82cO2MBpb30WAGLRuugYhAx Content-Type: text/plain; charset=UTF-8; name="0001-Introduce-selectivity-hook.patch" Content-Disposition: attachment; filename="0001-Introduce-selectivity-hook.patch" Content-Transfer-Encoding: base64 RnJvbSA3MTEzYTRkMGI0NWE0Y2YwMGI3ODA3NmQ1NTU3MGFkZTYwZmY5ODQxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFdlZCwgNSBNYXIgMjAyNSAwOTozODozMCArMDEwMApTdWJqZWN0 OiBbUEFUQ0hdIEludHJvZHVjZSBzZWxlY3Rpdml0eSBob29rLgoKLS0tCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYyB8ICA1ICsrKysrCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3Nl bGZ1bmNzLmggICAgICAgICAgIHwgMTEgKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg MTcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2NsYXVzZXNlbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMKaW5kZXggNWQ1MWY5N2YyMTkuLjZiNWQ0OWQwNzg2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwpAQCAtMTI4LDYgKzEyOCwxMSBAQCBjbGF1c2VsaXN0 X3NlbGVjdGl2aXR5X2V4dChQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0Q2VsbCAgICpsOwog CWludAkJCWxpc3RpZHg7CiAKKwlpZiAoY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9ob29rKQor CQlyZXR1cm4gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9ob29rKHJvb3QsIGNsYXVzZXMsIHZh clJlbGlkLCBqb2ludHlwZSwKKwkJCQkJCQkJCQkgICBzamluZm8sICZlc3RpbWF0ZWRjbGF1 c2VzLAorCQkJCQkJCQkJCSAgIHVzZV9leHRlbmRlZF9zdGF0cyk7CisKIAkvKgogCSAqIElm IHRoZXJlJ3MgZXhhY3RseSBvbmUgY2xhdXNlLCBqdXN0IGdvIGRpcmVjdGx5IHRvCiAJICog Y2xhdXNlX3NlbGVjdGl2aXR5X2V4dCgpLiBOb25lIG9mIHdoYXQgd2UgbWlnaHQgZG8gYmVs b3cgaXMgcmVsZXZhbnQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IGMyOTE4 YzljODMxLi5lNjYzNDZlZjZiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAg LTE0Nyw2ICsxNDcsNyBAQAogLyogSG9va3MgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wg d2hlbiB3ZSBhc2sgZm9yIHN0YXRzICovCiBnZXRfcmVsYXRpb25fc3RhdHNfaG9va190eXBl IGdldF9yZWxhdGlvbl9zdGF0c19ob29rID0gTlVMTDsKIGdldF9pbmRleF9zdGF0c19ob29r X3R5cGUgZ2V0X2luZGV4X3N0YXRzX2hvb2sgPSBOVUxMOworY2xhdXNlbGlzdF9zZWxlY3Rp dml0eV9ob29rX3R5cGUgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9ob29rID0gTlVMTDsKIAog c3RhdGljIGRvdWJsZSBlcXNlbF9pbnRlcm5hbChQR19GVU5DVElPTl9BUkdTLCBib29sIG5l Z2F0ZSk7CiBzdGF0aWMgZG91YmxlIGVxam9pbnNlbF9pbm5lcihPaWQgb3BmdW5jb2lkLCBP aWQgY29sbGF0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvc2VsZnVuY3Mu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKaW5kZXggZDM1OTM5NjUxZjMuLmNl NGJhMjdkMTgzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9zZWxmdW5jcy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmgKQEAgLTE0OSw2ICsxNDksMTcgQEAg dHlwZWRlZiBib29sICgqZ2V0X2luZGV4X3N0YXRzX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZv ICpyb290LAogCQkJCQkJCQkJCSAgIFZhcmlhYmxlU3RhdERhdGEgKnZhcmRhdGEpOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGdldF9pbmRleF9zdGF0c19ob29rX3R5cGUgZ2V0X2luZGV4X3N0 YXRzX2hvb2s7CiAKKy8qIEhvb2tzIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIHdoZW4g d2UgYXNrIGZvciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uICovCit0eXBlZGVmIFNlbGVjdGl2 aXR5ICgqY2xhdXNlbGlzdF9zZWxlY3Rpdml0eV9ob29rX3R5cGUpICgKKwkJCQkJCQkJCQkJ CVBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywKKwkJCQkJ CQkJCQkJCWludCB2YXJSZWxpZCwKKwkJCQkJCQkJCQkJCUpvaW5UeXBlIGpvaW50eXBlLAor CQkJCQkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJCQkJCQlCaXRt YXBzZXQgKiplc3RpbWF0ZWRjbGF1c2VzLAorCQkJCQkJCQkJCQkJYm9vbCB1c2VfZXh0ZW5k ZWRfc3RhdHMpOworZXh0ZXJuIFBHRExMSU1QT1JUIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlf aG9va190eXBlIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlfaG9vazsKKwogLyogRnVuY3Rpb25z IGluIHNlbGZ1bmNzLmMgKi8KIAogZXh0ZXJuIHZvaWQgZXhhbWluZV92YXJpYWJsZShQbGFu bmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwgaW50IHZhclJlbGlkLAotLSAKMi40OC4xCgo= --------------M82cO2MBpb30WAGLRuugYhAx--